请求评审BST层序遍历代码:输出层级格式不符,求教外层循环构建
解决二叉搜索树层序遍历的分层输出问题
嘿,我来帮你搞定这个层序遍历的问题~你现在的代码问题在于没有按层分组,每次取出一个节点就直接把它单独放到一个子列表里,所以才会得到每个节点单独一层的结果。要实现按层输出,核心是要记录每一层的节点数量,一次性处理完当前层的所有节点,把它们的值放在同一个子列表中。
问题分析
你的现有代码逻辑是:
- 每次从队列取出一个节点,就创建一个只包含该节点值的子列表加入结果
- 这样每个节点都会成为单独的一层,和预期的分层输出不符
修正后的代码
# Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None import queue class Solution(object): def levelOrder(self, root): # 处理根节点为空的边界情况 if not root: return [] L = queue.Queue() local = [] L.put(root) # 外层循环:处理每一层 while not L.empty(): # 获取当前层的节点数量 level_size = L.qsize() current_level = [] # 内层循环:处理当前层的所有节点 for _ in range(level_size): node = L.get() current_level.append(node.val) # 将子节点加入队列,为下一层做准备 if node.left: L.put(node.left) if node.right: L.put(node.right) # 把当前层的结果加入最终列表 local.append(current_level) return local
关键逻辑解释
- 外层while循环:负责遍历每一层,只要队列不为空,就说明还有层需要处理
level_size = L.qsize():获取当前队列的长度,也就是当前层的节点总数(因为队列里此时全是当前层的节点)- 内层for循环:循环
level_size次,一次性取出当前层的所有节点,把它们的值收集到current_level列表中,同时将每个节点的左右子节点加入队列(这些子节点就是下一层的节点) local.append(current_level):把整层的结果加入最终输出列表
这样修改后,就能得到你预期的[[3],[9,20],[15,7]]格式的输出啦~
内容的提问来源于stack exchange,提问作者anon anon
相关产品推荐
相关产品推荐

