1

在Mark Allen Weiss 的Data Structures and Algorithm Analysis in C++(第 4 版)中,在第 162 页的图 4.50 中,该书描述了将树的最左边的孩子与唯一的左孩子展开最终的样子。

我感到困惑的是这本书是如何从第 2 步到第 3 步的。以下是第 162 页图 4.50 中突出显示的步骤:

在此处输入图像描述

而我的第三步看起来像这样:

               7                                                                                          
              /                                                  
             6                                                   
            /                                                    
           1                    
            \                                                  
             3                                                  
            / \
           2   4
                \
                 5

我的第四步也是最后一步是这样的:

    1
     \
      4
     / \
    3   6
   /   / \
  2    5  7

我对这本书如何平衡树感到困惑。对我来说,当 1 超过 4 时,树的底部看起来像这样:

  ...
 /
1
 \
  2
   \
    3
     \
      4

我的逻辑是发生平衡的根是 2。然后你会做一个左旋转,树的底部看起来像这样:

  ...
 /
1
 \
  3
 / \
2   4

我做错了什么,还是我只是以一种不同但同样有效的方式来做这件事?我也很困惑,因为这本书的最后一棵树从 6 的根开始不平衡,而我的 4 的根没有不平衡。

4

1 回答 1

1

这主要是向上的“Zig-zig”情况,因此每次您在节点的祖父母上进行右旋转,然后在父节点上进行右旋转。

举个例子:

           5                                                                                          
          /                                                  
         4                                                   
        /                                                    
       3                    
      /                                                  
     2
    /
   1

如果要张开 1,请先围绕 3 再旋转 2,结果是:

        5                                                                                          
       /                                                  
      4                                                   
     /                                                    
    1
     \
      2
       \
        3                   

由于又是 Zig-Zig 情况,我们先旋转 5 再旋转 4,结果:

   1
    \
     4
    / \
   2   5
    \
     3     

所以你一直这样做,直到你有 1 作为根。有 3 种情况,Zig-Zig、Zig 和 Zig-Zag。这是一个可视化整个概念的工具,我相信它会有所帮助。

于 2019-12-03T00:40:13.057 回答