2

我有一本书以一种非常糟糕的方式解释了整个二叉搜索树,到目前为止,我已经能够仔细研究我的书并了解二叉搜索树,但是我找到了二叉搜索树操作的解释Delete

我确实了解前两个简单的操作:

  • 删除叶子(没有孩子的节点):删除叶子很容易,因为我们可以简单地将它从树中删除。
  • 删除具有一个子节点的节点:删除节点并将其替换为其子节点。

然而,有两个孩子的人对我来说真的很难理解,我已经在 wiki 和其他网站上阅读过,试图找到解决方案,但我发现解释有点加密。

我希望这里有人可以给我更多细节或以另一种方式向我解释?

4

3 回答 3

2

如果你理解了前两条规则,那么删除一个有两个孩子的节点就不难理解了。

一个很简单的想法是,去要删除的节点的有序后继(或前驱)。然后再次应用前两条规则和前一条规则。

在编程时,拥有一个功能齐全的后继(前驱)函数会使编码删除变得简单得多。

对于这棵树:

在此处输入图像描述

要删除 8 :

  • 前往 9 (7)

  • 用 10 代替 9

  • 将 8 替换为 9 (7)

要删除 12 :

  • 转至 14 (10)

  • (将 9 替换为 10)

  • 将 12 替换为 14 (10)

于 2013-01-01T14:52:39.233 回答
2

我们可以简单地说:

要在二叉树中删除具有 2 个子节点的节点 N(如前面提到的),请将此 N 替换为左子树的最大节点或右子树的最小节点

于 2013-06-05T09:37:20.640 回答
1

当节点有两个孩子时,您必须:

  1. 找到最小值。
  2. 用最小元素替换要删除的节点的key。

看这张图: 我们要删除元素 4

在此处输入图像描述

  • 4 有 2 个孩子。

  • 找到最小右子树。

  • 5 找到。

  • 因此,4 被 5 替换,4 被删除。

希望这就是你正在寻找的!

于 2013-01-01T14:49:52.677 回答