Python二叉树代码报错NameError: name 'Node' is not defined的原因与解决
问题分析与解决
核心错误:缩进错误导致类未完成定义时被引用
你的if __name__ == '__main__':代码块被错误缩进,放在了Node类的内部。Python在解析类定义时,会执行类内部的所有顶层代码,此时Node类还未完成定义,所以在类内部引用Node会触发NameError: name 'Node' is not defined。
其他需要修正的代码问题
除了缩进,代码还有两处问题:
__init__方法中定义的节点值属性是self.v,但insert方法里却使用self.value,属性名不匹配,会导致后续调用insert时触发AttributeError- 主程序中
r = Node只是引用类对象,不是创建实例,必须调用构造函数传入初始值,比如Node(10)
修正后的完整代码
class Node: def __init__(self, value): self.value = value # 统一属性名,和insert方法保持一致 self.right = None self.left = None def insert(self, value): if self.value: if value < self.value: if self.left is None: self.left = Node(value) else: self.left.insert(value) elif value > self.value: if self.right is None: self.right = Node(value) else: self.right.insert(value) else: self.value = value # 主程序代码放在类的外部,回到最外层缩进 if __name__ == '__main__': r = Node(10) # 创建Node实例,传入初始值 r.insert(5) r.insert(15)
说明
修正后:
- 主程序在类外部执行,此时Node类已完全定义,创建实例不会报错
- 属性名统一为
self.value,insert方法能正常访问节点值 - 正确创建实例后,可以正常调用insert方法插入子节点
内容的提问来源于stack exchange,提问作者name__
相关产品推荐
相关产品推荐

