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

无法删除二叉搜索树(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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:13:33