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

LeetCode102二叉树层序遍历报错:AttributeError: 'int'对象无'val'属性

问题分析与解决

错误原因

你触发AttributeError的核心原因是递归传参错误:

  • 代码中调用self.levelOrder(curr.left.val)时,传入的是curr.left节点的val属性(整数类型),但levelOrder函数的参数要求是TreeNode类型。
  • 当递归进入下一层时,root变量变成了整数,执行root.val时自然报错——整数没有val属性。

除此之外,代码还有其他逻辑问题:

  1. 空树返回None,但题目要求返回[](空列表),不符合题目输出格式。
  2. 递归逻辑错误:层序遍历需要按层级收集节点值,你的代码直接把左右子树的递归结果嵌套加入列表,无法得到正确的层级结构。

修正方案

方案1:迭代法(队列实现,层序遍历标准写法)

用队列保存每一层的节点,遍历每一层时收集节点值,再把下一层节点加入队列:

# 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 collections import deque
class Solution:
    def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
        if not root:
            return []
        
        result = []
        queue = deque([root])
        
        while queue:
            level_size = len(queue)
            current_level = []
            # 遍历当前层的所有节点
            for _ in range(level_size):
                node = queue.popleft()
                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

方案2:递归法(记录当前层级)

递归时传递当前层级,把节点值加入对应层级的列表:

# 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
class Solution:
    def levelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
        result = []
        
        def helper(node, level):
            if not node:
                return
            # 如果当前层级还没有对应的列表,新建一个
            if len(result) == level:
                result.append([])
            # 把当前节点值加入对应层级的列表
            result[level].append(node.val)
            # 递归处理左右子树,层级+1
            helper(node.left, level + 1)
            helper(node.right, level + 1)
        
        helper(root, 0)
        return result

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:10:44