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

请求评审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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:35:24