二进制搜索树节点删除:如何确定要遍历哪个子树进行删除? 如果节点有两个孩子

问题描述

当一个节点有两个孩子时,我正在寻求帮助来理解二叉搜索树的移除。

我知道的是,当要删除的BST节点有两个孩子时,一个孩子可以找到从右子树开始的最小值,或者从左子树开始的最大值。

默认情况下,我应该遍历哪个子树-应该使用右还是左子树?在什么情况下应该选择左/右子树?这个选择有多重要?

请耐心等待,因为我是DS和算法的新手。

解决方法

如果树或多或少是平衡的,遍历哪个子树以找到替换树就没有关系。

否则,如果树比较沉重,则转到右侧的子树并选择最小的值可能会更快。反之亦然,如果树很重。


此外,无论BST仅具有唯一值还是树具有重复项,从左子树或右子树中选择根替换项都不会影响树的不变性。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...