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

Python实现BST时初始将root设为None触发类型错误是什么原因?

问题根因
  • 插入第一个元素时类型赋值错误:当根节点初始key为None时,原代码insert分支错误将BST(data)实例赋值给了self.key字段,导致key存储的是节点对象而非数值,后续执行self.key < data比较时,触发了BST实例与整数不支持比较的类型错误。
  • 附加逻辑缺陷:原代码比较方向写反,不符合二叉搜索树左子树值小于当前节点、右子树值大于当前节点的标准规则,即使解决类型错误也无法生成结构正确的BST。
修复后可运行代码
class BST:
    def __init__(self,key):
        self.key = key
        self.lchild = None
        self.rchild = None

    def insert(self,data):
        if self.key is None:
            # 直接存储数值到key字段
            self.key = data
            return
        # 调整比较逻辑,符合左小右大的BST规则
        if data < self.key:
            if self.lchild:
                self.lchild.insert(data)
            else:
                self.lchild = BST(data)
        else:
            if self.rchild:
                self.rchild.insert(data)
            else:
                self.rchild = BST(data)
    
    def preorder(self):
        print(self.key)
        if self.lchild:
            self.lchild.preorder()
        if self.rchild:
            self.rchild.preorder()

root = BST(None)
list1 = [20,34,1,3,4,78]
for i in list1:
    root.insert(i)
root.preorder()
运行输出
20
1
3
4
34
78

内容的提问来源于stack exchange,提问作者Mohib

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:27:04