删除二叉搜索树中的节点

时间:2014-02-15 16:27:07

标签: binary-search-tree removechild

我正在阅读一本关于从二进制搜索树中删除节点的书,本书中描述的过程对我来说似乎不必要。

我的问题是具体关于删除具有左子树和右子树的节点。在我看来,如果其左子树只有一个节点,则应该由其左子树中最右边的节点或其左边节点替换节点。 enter image description here

在第一种情况下,如果我们删除40,它将被替换为30;在第2号情况下,如果我们删除40,它将被替换35。

但在书中,它说应该从节点到删除的右子树中找到替换,这可能涉及一些复杂的操作。

我在这里遗漏了什么吗?请指出。

2 个答案:

答案 0 :(得分:1)

你所指出的是正确的,删除​​的节点应该被 替换为顺序继承者,它是右子树中最左边的节点或其有序的前身,即左子树中最右边的节点。这允许正确遍历树。大多数二叉搜索树数据结构允许以任一方式执行删除,但在某些情况下,您可能希望实现删除以使树保持平衡。

Wikipedia上提供了更多详细信息和示例代码。

答案 1 :(得分:0)

如果删除节点40,则在第1种情况下,将替换为50。

如果删除节点40,则在第2种情况下,将替换为50。

所以基本上当我们删除任何有2个子节点的节点时,删除应该如下所示。 我们去了节点的正确孩子,然后是那个孩子的最左边。

下图显示了一些示例,如何从二叉搜索树中删除节点。这也取自一本书,但它清楚地解释了。

enter image description here  enter image description here  enter image description here