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

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__

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 16:01:08