无法删除二叉搜索树(BST)根节点的技术问题求助
Python BST根节点删除异常:Node.remove()接收的data参数为None,尽管BinarySearchTree.delete()传入有效值
最近我在Python里学习并实现二叉搜索树(BST),把代码拆成了三个模块:Node.py、BinarySearchTree.py和Output.py。目前除了根节点的删除功能,其他增删查操作(包括非根节点的删除)都能正常运行,但执行根节点删除命令时总是出问题。
具体异常情况是:我在BinarySearchTree类的delete方法里明明传入了有效的数据值,但调用Node类的remove方法时,这个方法接收到的data参数却变成了None,导致后续删除逻辑直接报错走不下去。
相关代码片段
先贴一下关键部分的代码:
BinarySearchTree.py 中的 delete 方法
class BinarySearchTree: def __init__(self): self.root = None def delete(self, data): # 这里打印过data,确认是有效的目标值 print(f"BinarySearchTree.delete() 传入的data: {data}") if self.root: self.root = self.root.remove(data)
Node.py 中的 remove 方法
class Node: def __init__(self, data): self.data = data self.left = None self.right = None def remove(self, data): # 这里打印的data却是None print(f"Node.remove() 接收的data: {data}") # 后续删除逻辑... if data < self.data: if self.left: self.left = self.left.remove(data) elif data > self.data: if self.right: self.right = self.right.remove(data) else: # 处理节点删除的三种情况 if not self.left and not self.right: return None elif not self.left: return self.right elif not self.right: return self.left else: temp = self.right.find_min() self.data = temp.data self.right = self.right.remove(temp.data) return self
我已经做的排查
- 在
BinarySearchTree.delete()里打印传入的data,确认是正确的根节点值,不是None - 检查了调用
self.root.remove(data)时的参数传递,看起来没有拼写错误 - 非根节点删除时,
Node.remove()能正常接收到正确的data值,只有根节点删除时出现这个问题
有没有大佬遇到过类似的情况?或者能帮我看看哪里可能出了问题吗?
内容的提问来源于stack exchange,提问作者Pranshu Duneja
相关产品推荐
相关产品推荐

