You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python递归遍历二叉树时变量使用错误排查(berry_finder函数故障)

问题分析与修复

首先,你的函数无法正常工作的主要原因是语法错误:在for branch in branches(t)这一行的末尾,你用了中文全角冒号:,而Python要求必须使用英文半角冒号:,这会直接触发语法错误,导致代码无法运行。

关于你怀疑的branch_list问题:其实每个递归调用里的branch_list都是局部变量,每次递归都会重新创建一个新的列表,不同层级的递归调用之间的branch_list完全独立,不会互相干扰,所以这并不是故障的原因。

另外,你的代码逻辑虽然能实现功能,但可以优化:不需要收集所有分支的结果再判断,只要发现某个分支返回True,就可以立刻返回True,不用继续遍历剩余分支,这样能提升效率。

修正后的代码如下:

def berry_finder(t):
    """Returns True if t contains a node with the value 'berry' and 
    False otherwise.

    >>> scrat = tree('berry')
    >>> berry_finder(scrat)
    True
    >>> sproul = tree('roots', [tree('branch1', [tree('leaf'), tree('berry')]), tree('branch2')])
    >>> berry_finder(sproul)
    True
    """
    if label(t) == 'berry':
        return True
    if is_leaf(t):
        return False
    for branch in branches(t):
        if berry_finder(branch):
            return True
    return False

优化点说明:

  • 先检查当前节点是否是'berry',不管是不是叶子节点,简化了逻辑结构
  • 遍历分支时,一旦某个分支返回True就立刻终止递归返回结果,避免不必要的计算
  • 移除了冗余的branch_list,减少内存占用

内容的提问来源于stack exchange,提问作者Half Dream

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 06:21:58