📜  数据结构|二叉搜索树|问题2

📅  最后修改于: 2021-06-28 22:58:31             🧑  作者: Mango

在BST的删除操作中,当要删除的节点的左右子节点均为非空时,我们需要节点的有序后继者(或前任继承者)。关于删除操作所需的有序后继者,以下哪项是正确的?
(A)顺序后继者始终是叶节点
(B)有序后继者始终是叶节点或左子节点为空的节点
(C)有序后继者可以是节点的祖先
(D)有序后继始终是叶节点或右子节点为空的节点答案: (B)
说明:以X为要在根为“ root”的树中要删除的节点。删除的情况有3种

1)X是叶节点:我们将父节点的左或右指针更改为NULL(取决于X是其父节点的左还是右子级),然后删除X
2)X的一个孩子为空:我们将非空孩子的值复制到X并删除非空孩子
3)X的两个子代都是非空的:在这种情况下,我们找到X的有序继承者。令有序继承者为Y。将Y的内容复制到X,然后删除Y。

Sp我们仅在X的左子元素和右子元素都不为空时才需要有序继承者。在这种情况下,有序后继者Y永远不可能是X的祖先。在这种情况下,有序后继者是X的右子树中的最左节点。由于它是最左节点,所以Y的左子节点必须为空。