二叉树学习笔记之树的旋转

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树学习笔记之树的旋转相关的知识,希望对你有一定的参考价值。

树旋转(Tree rotation)是二叉树中的一种子树调整操作,每一次旋转并不影响对该二叉树进行中序遍历的结果。
树旋转通常应用于需要调整树的局部平衡性的场合。

>>左旋和右旋

树的旋转有两种基本的操作,即左旋(逆时针方向旋转)和右旋(顺时针方向旋转)。

技术分享

树旋转包括两个不同的方式,分别是左旋转(以P为转轴)和右旋转(以Q为转轴)。两种旋转呈镜像,而且互为逆操作。

下图示意了两种树旋转过程中, 子树的初态和终态

        +---+                          +---+
        | Q |                          | P |
        +---+                          +---+
       /     \     right rotation     /         +---+   +---+  ------------->  +---+   +---+
    | P |   | Z |                  | X |   | Q |
    +---+   +---+  <-------------  +---+   +---+
   /     \          left rotation         /     +---+   +---+                          +---+   +---+
| X |   | Y |                          | Y |   | Z |
+---+   +---+                          +---+   +---+

其中, 右旋转详细步骤如下图 R0, R1, R2 三个步骤所示, 左旋转则如 L0, L1, L2 三个步骤所示.

                                                                  __
                                                                 /                                       +---+                      /  +---+
                                     | Q |                     /   | Q |
                           +---+     +---+              +---+ /    +---+
        +---+              | P |    /     \      R1     | P |/    /     \              +---+
        | Q |     R0       +---+   /     +---+ ----->   +---+    /     +---+   R2      | P |
        +---+   ----->    /     \ /      | Z |         /        /      | Z | ----->    +---+
       /     \         +---+   +---+     +---+      +---+    +---+     +---+          /         +---+   +---+      | X |   | Y |                | X |    | Y |                 +---+   +---+
    | P |   | Z |      +---+   +---+                +---+    +---+                 | X |   | Q |
    +---+   +---+              __                                                  +---+   +---+
   /     \                    /  \                                                        /     +---+   +---+     L2       +---+  \                       +---+                L0      +---+   +---+
| X |   | Y |   <-----     | P |   \                      | P |              <-----    | Y |   | Z |
+---+   +---+              +---+    \ +---+      L1       +---+     +---+              +---+   +---+
                          /     \    \| Q |    <-----    /     \    | Q |
                       +---+     \    +---+           +---+     \   +---+
                       | X |      \        \          | X |      \ /                            +---+     +---+    +---+       +---+     +---+   +---+
                                 | Y |    | Z |                 | Y |   | Z |
                                 +---+    +---+                 +---+   +---+

>>AVL树的调整

AVL树的基本操作一般涉及运作同在不平衡的二叉查找树所运作的同样的算法。但是要进行预先或随后做一次或多次所谓的"AVL旋转"。

技术分享

 

整理自 维基百科

以上是关于二叉树学习笔记之树的旋转的主要内容,如果未能解决你的问题,请参考以下文章

数据结构之树以及二叉树的相关概念

数据结构从青铜到王者第八篇:数据结构之树

第三章之树

数据结构之树篇3——平衡二叉树(AVL树)

数据结构学习笔记——广义表树和二叉树的基本知识

数据结构学习笔记——广义表以及树和二叉树的基本知识