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

BST删除双子树节点时为何不选取左子树最大值替代?

结论先行

你的判断完全正确:删除拥有两棵子树的BST节点时,选择左子树的最大值替换待删除节点是完全合法的操作,不存在“不能用”的问题。它和“查找右子树最小值替换”是完全对称的两种标准实现,都能严格满足BST的有序约束,你找不到反例是非常正常的——因为这个方案从原理上就不会破坏BST性质。

两种方案的等价性原理

BST的核心约束是:对任意节点,其左子树所有节点值严格小于该节点值,右子树所有节点值严格大于该节点值。

  • 右子树的最小值是右子树最靠左的节点:它是右子树里最小的值,天然满足「大于左子树所有节点、小于右子树剩余节点」的要求,刚好适配待删节点的取值位置
  • 左子树的最大值是左子树最靠右的节点:它是左子树里最大的值,天然满足「大于左子树剩余节点、小于右子树所有节点」的要求,同样完美适配待删节点的取值位置

两种方案的后续处理逻辑也完全对称:

  • 右子树的最小值一定没有左子节点,删除这个替换节点时,只需要把它的右子节点(如果存在)挂到它的父节点上即可
  • 左子树的最大值一定没有右子节点,删除这个替换节点时,只需要把它的左子节点(如果存在)挂到它的父节点上即可
    二者的代码实现复杂度、时间复杂度完全一致,没有本质区别。
为什么教材里更常提右子树最小值的方案

这只是教学和实现的习惯偏好,不是技术层面的对错:

  • 早期经典算法教材、教学案例普遍默认采用右子树最小值的方案,长期形成了路径依赖,很多人第一次接触BST删除时只学到了这一种实现,就误以为这是唯一合法方案
  • 部分工程实现里甚至会根据当前节点左右子树的高度,动态选择两种替换方案:比如左子树更高就选左子树最大值,右子树更高就选右子树最小值,以此降低后续树失衡的概率,优化查询效率
  • 即便是AVL树、红黑树这类带平衡规则的BST,两种方案也都可以使用,只需要对应调整替换后的重平衡、旋转逻辑即可,不存在功能上的缺陷。

举个最直观的例子:待删除节点值为10,左子树包含节点5、7、9,右子树包含节点12、15、20。用右子树最小值12替换10,所有节点满足大小约束;用左子树最大值9替换10,同样满足「左子树所有值<9<右子树所有值」的规则,没有任何问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:15:33