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
相关产品推荐
相关产品推荐

