二叉树层序遍历代码错误排查:输出顺序不符问题咨询
二叉树层序遍历错误分析与修正
你的问题出在使用了栈的弹出逻辑而非队列,层序遍历的核心是依靠队列「先进先出(FIFO)」的特性按层级顺序访问节点,而你的代码实现成了栈的「先进后出(LIFO)」行为。
具体错误点
你用了que.pop(),这个方法默认从列表末尾弹出元素。比如当处理节点2时,你先将左孩子3加入队列,再加入右孩子5,此时队列是[3,5],pop()会取出末尾的5而非头部的3,导致右子树先被访问,最终输出顺序和预期不符。
修正方法
把que.pop()改成que.pop(0),这个方法会从列表头部弹出元素,完全符合队列先进先出的要求,这样就能正确按层级顺序遍历节点。
修正后的代码:
def levelOrder(root): que = [] que.append(root) while que != []: coot = que.pop(0) # 改为从队列头部弹出元素 print(coot.data, end=" ") if coot.left is not None: que.append(coot.left) if coot.right is not None: que.append(coot.right)
内容的提问来源于stack exchange,提问作者Hansel Gavin Dias
相关产品推荐
相关产品推荐

