二进制搜索树删除操作

时间:2013-01-01 14:24:00

标签: data-structures binary-tree binary-search-tree

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

我理解这两个简单的操作:

  • 删除一个叶子(没有子节点的节点):删除一个叶子很简单,如 我们可以简单地从树上删除它。
  • 删除包含一个子节点的节点:删除节点并将其替换为 它的孩子。

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

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

3 个答案:

答案 0 :(得分:2)

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

一种非常简单的思考方式是,转到要删除的节点的有序后继(或前任)。然后再次应用前两个规则和先前的规则。

编程时,具有完整功能的后继功能(前驱)功能使编码删除变得更加简单。

对于这棵树:

enter image description here

要删除8:

  • 转到9(7)

  • 将9替换为10

  • 将8替换为9(7)

要删除12:

  • 转到第14(10)页

  • (将9替换为10)

  • 将12替换为14(10)

答案 1 :(得分:2)

我们可以简单地说:

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

答案 2 :(得分:1)

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

  1. 找到最低限度。
  2. 用最小元素替换要删除的节点的密钥。
  3. 看看这张图: 我们要删除元素4

    enter image description here

    • 4有2个孩子。

    • 找到最小权利子树。

    • 5找到。

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

    希望这就是你要找的东西!!