LeetCode 102题二叉树层序遍历代码问题:最后层级未正确添加
LeetCode 102. 二叉树的层序遍历代码修复
问题描述
当前代码无法正确输出二叉树层序遍历结果,输入root = [3,9,20,null,null,15,7]时,预期输出为[[3],[9,20],[15,7]],实际输出为[[3],[9,20],[]],最后一层节点值未被正确收集,反而添加了空数组。
错误原因分析
- 初始逻辑错误:手动将根节点值加入结果数组,导致后续循环处理的是子节点层,最后一层节点的子节点为空,因此添加了空数组,而最后一层本身的节点值从未被收集。
- 队列操作与遍历冲突:
nodes = queue是引用赋值,遍历nodes的同时对queue执行pop(0),导致遍历逻辑混乱,节点处理重复或遗漏。 - 节点值收集逻辑颠倒:代码中收集的是当前节点子节点的值,而非当前层节点自身的值,导致最后一层节点值未被加入结果。
修复后的代码
# 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
相关产品推荐
相关产品推荐

