【问题标题】:Proper way to Re-Balance a 2-3 Tree after deleting the root node删除根节点后重新平衡 2-3 树的正确方法
【发布时间】:2016-02-28 14:12:39
【问题描述】:

目标是从根节点中移除 22 并重新平衡树。

首先我删除 22,并用它的有序后继 28 替换它。

其次,我通过将空节点向左移动来重新平衡生成的树。结果树如下。

将 28 向上移动是正确的过程,最后我是否正确平衡了左侧?

         22,34
     /     |    \
   16      28    37
   / \    / \    / \
 15   21 25  33 35 43  

        [28],34
     /     |    \
   16      *     37
   / \    / \    / \
 15   21 25  33 35 43 

           34
        /       \
      16,28      37
    /   |   \    / \
  15  21,25  33 35 43 

谢谢!

【问题讨论】:

  • 一棵2-3棵树的平衡是所有子树的高度相同。在我看来,这里就是这种情况。
  • 22 的顺序后继是 25。
  • 是的,这是一个错误。所以现在我只需要在中间节点组合 (28,33) ,但它们不再处于相同的高度。重新平衡后的左右子树会是什么样子?

标签: algorithm binary-tree tree-balancing


【解决方案1】:

删除22

       22,34
   /     |     \
  16     28     37
 / \    / \    / \
15  21 25  33 35  43 ,

我们将其替换为它的有序继任者25,留下一个漏洞 (*)。

       25,34
   /     |     \
  16     28     37
 / \    / \    / \
15  21 *   33 35  43

我们不能通过借用来修复这个洞,所以我们将它的父元素合并到它的兄弟元素中,向上移动这个洞。

       25,34
   /     |     \
  16     *      37
 / \     |     / \
15  21 28,33  35  43

这个洞现在有两个兄弟姐妹,所以我们可以重新分配一个父母的钥匙。

         34
     /        \
  16,25        37
 /  |   \     / \
15  21 28,33 35  43

(我在this set of lecture notes 工作。除非是为了考试,否则不要费心记住这里的细节。即便如此......我真的希望数据结构课程没有像他们那样强调平衡搜索树.)

【讨论】:

  • 必须同意对搜索树评论的强调,但这确实是我学习如何调试代码和递归的地方,这两个非常重要的技能
  • 非常感谢您的解释!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-03
  • 1970-01-01
相关资源
最近更新 更多