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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 02:01:57