3

目标是从根节点中删除 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 

谢谢!

4

1 回答 1

2

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

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

于 2016-02-28T19:10:21.900 回答