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
相关产品推荐
相关产品推荐

