二叉树后序遍历函数调用报错:name 'postorder'未定义问题排查
问题原因及修复方案
错误根源
你在Solution类的方法内部调用postorder时,没有使用self.前缀。Python中,类的成员方法必须通过实例(即self)来访问,否则会被当作全局函数查找,而你并没有定义全局的postorder函数,因此触发NameError。
另外原代码中TreeNode的__init__方法存在缩进错误,self.left和self.right的缩进不一致,这也会导致语法问题,需要一并修正。
修正后的代码
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 postorder(self, root, a): if not root: return # 调用类内方法必须加self. self.postorder(root.left, a) self.postorder(root.right, a) a.append(root.val) def postorderTraversal(self, root: Optional[TreeNode]) -> List[int]: a = [] # 同样需要加self.调用类内方法 self.postorder(root, a) return a
关键修改点
- 所有类内部调用
postorder的地方,都加上self.前缀,比如self.postorder(root.left, a) - 修正
TreeNode类中__init__方法的缩进问题,保证成员变量定义的缩进统一 - 补充了必要的类型导入
from typing import Optional, List(原代码中使用了Optional和List但未导入,也会触发报错)
内容的提问来源于stack exchange,提问作者mn n
相关产品推荐
相关产品推荐

