LeetCode102二叉树层序遍历报错:AttributeError: 'int'对象无'val'属性
问题分析与解决
错误原因
你触发AttributeError的核心原因是递归传参错误:
- 代码中调用
self.levelOrder(curr.left.val)时,传入的是curr.left节点的val属性(整数类型),但levelOrder函数的参数要求是TreeNode类型。 - 当递归进入下一层时,
root变量变成了整数,执行root.val时自然报错——整数没有val属性。
除此之外,代码还有其他逻辑问题:
- 空树返回
None,但题目要求返回[](空列表),不符合题目输出格式。 - 递归逻辑错误:层序遍历需要按层级收集节点值,你的代码直接把左右子树的递归结果嵌套加入列表,无法得到正确的层级结构。
修正方案
方案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
相关产品推荐
相关产品推荐

