Python类间调用及二叉树迭代式中序遍历报错解决咨询
问题解决:二叉树中序遍历迭代法调用错误
两个核心问题的原因及解决
1. "list object has no attribute 'left'" 错误
你直接把列表[1,'',2,3]传给了inorderTraversal方法,但这个方法要求传入的是TreeNode类型的对象,不是列表。列表自然没有left、right这些TreeNode类的属性,所以报错。
解决方法:手动构建符合需求的二叉树节点结构。比如题目里的树结构是根节点1,右子节点是2,2的左子节点是3,对应的节点构建代码应该是:
# 构建节点 node3 = TreeNode(3) node2 = TreeNode(2, left=node3) root = TreeNode(1, right=node2)
2. Python中没有null
Python里表示空值用None,不是null,直接写null会因为未定义报错,所以空节点都要用None表示。
修正后的完整代码
from typing import List from typing import Optional # 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 inorderTraversal(self, root: Optional[TreeNode]) -> List[int]: res = [] stack = [] cur = root while cur or stack: while cur: stack.append(cur) cur = cur.left cur = stack.pop() res.append(cur.val) cur = cur.right return res # 建议返回结果而非直接打印,更符合算法题常规要求 # 构建目标二叉树 node3 = TreeNode(3) node2 = TreeNode(2, left=node3) root = TreeNode(1, right=node2) # 正确调用方法:先创建实例再调用 sol = Solution() print(sol.inorderTraversal(root)) # 输出 [1,3,2]
补充说明
- 算法题里常用列表描述二叉树结构,但编码时需要手动把列表转成TreeNode实例(若题目未提供转换函数)。
- 调用类的实例方法时,常规写法是先创建类的实例(比如
sol = Solution()),再通过实例调用方法,而非直接用Solution.inorderTraversal(Solution, ...)这种方式。
内容的提问来源于stack exchange,提问作者Mike Curtis
相关产品推荐
相关产品推荐

