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

LeetCode 102题二叉树层序遍历代码问题:最后层级未正确添加

LeetCode 102. 二叉树的层序遍历代码修复

问题描述

当前代码无法正确输出二叉树层序遍历结果,输入root = [3,9,20,null,null,15,7]时,预期输出为[[3],[9,20],[15,7]],实际输出为[[3],[9,20],[]],最后一层节点值未被正确收集,反而添加了空数组。

错误原因分析

  1. 初始逻辑错误:手动将根节点值加入结果数组,导致后续循环处理的是子节点层,最后一层节点的子节点为空,因此添加了空数组,而最后一层本身的节点值从未被收集。
  2. 队列操作与遍历冲突:nodes = queue是引用赋值,遍历nodes的同时对queue执行pop(0),导致遍历逻辑混乱,节点处理重复或遗漏。
  3. 节点值收集逻辑颠倒:代码中收集的是当前节点子节点的值,而非当前层节点自身的值,导致最后一层节点值未被加入结果。

修复后的代码

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
from typing import Optional, List

class Solution:
    def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
        if not root:
            return []
        
        queue = [root]
        result = []
        
        while queue:
            level_size = len(queue)
            current_level = []
            for _ in range(level_size):
                node = queue.pop(0)
                current_level.append(node.val)
                if node.left:
                    queue.append(node.left)
                if node.right:
                    queue.append(node.right)
            result.append(current_level)
        
        return result

修复说明

  • 移除了初始手动添加根节点值的逻辑,改为在循环中统一处理每一层。
  • 每次循环先获取当前层的节点数量,确保遍历的是当前层的所有节点,避免队列操作干扰遍历。
  • 收集当前层节点自身的值,再将子节点加入队列作为下一层,符合层序遍历的核心逻辑:逐层从左到右访问节点。

内容的提问来源于stack exchange,提问作者Faisal Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:55:23