gpt4 book ai didi

algorithm - 删除二叉树中节点的方法

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

我正在看一本解释如何从二叉搜索树中删除节点的书,基本上如果我们有这棵树的话:

       10
/ \
4 100
/ \
1 8
/ \
6 9
\
7

我们想删除节点 4,书上说我应该:

  1. 在其右子树(即 6)中找到 4 的后继
  2. 交换 4 和 6
  3. 从右子树中删除6
  4. 将 4 的左子树(在本例中为 1)附加到新节点 6

因此我们得到

       10
/ \
6 100
/ \
1 8
/ \
7 9

但是我想到了另一种方法:

  1. 找到4个右子树的最小元素(即6)
  2. 将 4 的左子树附加到 6(它不会有左 child )
  3. 将父元素 (10) 附加到 4 的右侧元素 (8)。如果算法是递归的,我们可以只返回 8

因此我们得到

       10
/ \
8 100
/ \
6 9
/ \
1 7

现在我想问:我看到我的解决方案产生了(至少在这种情况下)稍微更不平衡的树。

为什么我应该使用我的书而不是我自己的?我的解决方案似乎更容易实现(至少从我的角度来看),但我更喜欢其他人指出我是否弄错了。

最佳答案

这两种方法的代码都不是特别复杂。

您的方法通常会生成不太平衡的树,因为您正在获取一个子树(1 的子树)并将它(可能)移到树下很远的地方。

通过他们的方法,7 的子树向上移动了 1 个节点,而其他子树没有移动。

这可能只是因为他们没有考虑过您的方法,或者,如果他们考虑过,他们很可能会选择他们的方法,因为树越不平衡,查询的性能就越差。

虽然这个讨论不是特别重要,因为基本的二叉搜索树在实践中很少使用 - self-balancing ones而是使用(由于试图保持某些属性以保持树平衡,可以对此提出更有力的论据)。

关于algorithm - 删除二叉树中节点的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23722692/

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