问题描述
当一个节点有两个孩子时,我正在寻求帮助来理解二叉搜索树的移除。
我知道的是,当要删除的BST节点有两个孩子时,一个孩子可以找到从右子树开始的最小值,或者从左子树开始的最大值。
默认情况下,我应该遍历哪个子树-应该使用右还是左子树?在什么情况下应该选择左/右子树?这个选择有多重要?
请耐心等待,因为我是DS和算法的新手。
解决方法
如果树或多或少是平衡的,遍历哪个子树以找到替换树就没有关系。
否则,如果树比较沉重,则转到右侧的子树并选择最小的值可能会更快。反之亦然,如果树很重。
此外,无论BST仅具有唯一值还是树具有重复项,从左子树或右子树中选择根替换项都不会影响树的不变性。