gpt4 book ai didi

algorithm - 二叉搜索树-删除

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:23:48 24 4
gpt4 key购买 nike

在二叉搜索树的情况下,为什么我们不能在删除节点有两个 child 的情况下简单地用前驱代替节点的后继?

最佳答案

我们想最小的工作量和对树结构的破坏来删除这样的节点。

假设我们要从以下树中删除包含 6 的节点:

enter image description here

标准解决方案是基于这样的想法:我们将包含 6 的节点保留在原处,但我们摆脱了值 6 并找到另一个值来存储在 6 节点中。该值取自 6 节点下方的一个节点,实际上是从树中移除的那个节点。

enter image description here

现在,我们可以将什么值移入空出的节点并得到一个二叉搜索树?好吧,这是解决方法。如果我们选择值 X,则:

  1. 左子树中的所有元素都必须小于 X。
  2. 右子树中的所有内容都必须大于 X。

假设我们要从左子树中获取 X。 (2) 是有保证的,因为左子树中的所有内容都小于右子树中的所有内容。 (1) 呢?如果 X 来自左子树,(1) 表示 X 有一个唯一的选择——我们必须选择 X 作为左子树中的最大值。在我们的示例中,3 是左子树中的最大值。因此,如果我们将 3 放入空出的节点并将其从当前位置删除,我们将得到一个删除了 6 的 BST。

结果是:

enter image description here

关于algorithm - 二叉搜索树-删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22587695/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com