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

📅  最后修改于: 2021-09-08 15:05:35             🧑  作者: Mango

在BST的删除操作中,当要删除的节点的左右孩子都为非空时,我们需要一个节点的有序后继(或前驱)。下列关于删除操作所需的中序后继者,哪项是正确的?
(A) Inorder Successor 总是叶节点
(B) 中序后继节点要么是叶子节点要么是左子节点为空的节点
(C) 中序后继可能是节点的祖先
(D) 中序后继节点要么是叶子节点要么是右孩子为空的节点答案:(乙)
说明:设 X 为根为 ‘root’ 的树中要删除的节点。删除的三种情况

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

Sp 只有当 X 的左右孩子都不为空时,我们才需要中序后继。在这种情况下,中序后继 Y 永远不可能是 X 的祖先。在这种情况下,中序后继是 X 右子树中最左边的节点。因为它是最左边的节点,所以 Y 的左子节点必须是空的。