Python编写Breadth-first traversal代码仅返回单个节点问题求助
Python广度优先遍历代码错误排查
错误点
return语句缩进错误,当前位于while循环内部,第一次循环处理完根节点后就直接返回,没有执行后续遍历逻辑,是输出仅为['A']的直接原因。- 未判断左右子节点是否为空就直接加入队列,遍历到叶子节点的空属性时会触发
AttributeError报错。
修正后完整代码
from collections import deque class Tree: def __init__(self,data): self.data = data self.right = None self.left = None def bft(root): list_nodes = [] # 边界处理:根节点为空直接返回空列表 if not root: return list_nodes traversal_queue = deque([root]) while len(traversal_queue)>0: node = traversal_queue.popleft() list_nodes.append(node.data) # 仅添加非空的子节点到队列 if node.left: traversal_queue.append(node.left) if node.right: traversal_queue.append(node.right) # 所有节点遍历完成后再返回结果 return list_nodes n1 = Tree('A') n2 = Tree('B') n3 = Tree('C') n4 = Tree('D') n1.left = n2 n1.right = n3 n2.left = n4 print(Tree.bft(n1))
运行后输出:['A', 'B', 'C', 'D'],符合预期。
内容的提问来源于stack exchange,提问作者jacobdavis
相关产品推荐
相关产品推荐

