平衡二叉树之平衡调整图解

先看一个平衡二叉树创建的例子。假设现在表中关键字序列为(13,24,37),具体的平衡二叉树创建过程如下图所示:
平衡二叉树之平衡调整图解_第1张图片
我们可以发现结点37的插入导致二叉树的根结点13的平衡因子变为-2,此时二叉树没有达到平衡状态。其中离插入结点最近且平衡因子绝对值超过1的祖先结点,以该结点为根的子树称为最小不平衡树, 我们可将重新平衡的范围局限于这颗树或子树。

一般情况下,假设最小不平衡树的根结点为A,则失去平衡后进行调整的规律可归纳为以下四种情况。

1. LL型

由于在A左子树根结点的左子树上插入结点C,A的平衡因子由1增至2,致使以A为根的子树失去平衡,则需要进行一次向右的顺时针旋转操作,如下图所示。
平衡二叉树之平衡调整图解_第2张图片

2. RR型

由于在A的右子树根结点的右子树上插入结点C,A的平衡因子由-1变为-2,致使以A为根结点的子树失去平衡,则需进行一次向左的逆时针旋转操作,如下图所示。
平衡二叉树之平衡调整图解_第3张图片

3. LR型

由于在A的左子树根结点的右子树上插入结点,A的平衡因子由1增至2,致使以A为根结点的子树失去平衡,则需要进行二次旋转操作。第一次对B及其右子树进行逆时针旋转,C转上去成为B的根,这时变成了LL型,所以第二次进行LL型的顺时针旋转即可恢复平衡。如果C原来有左子树,则调整C的左子树为B的右子树,如下图所示。
平衡二叉树之平衡调整图解_第4张图片

4. RL型

由于在A的右子树根结点的左子树上插入结点,A的平衡因子由-1变为-2,致使以A为根结点的子树失去平衡,则旋转方法和LR型相对称,也需进行两次旋转第一次对B及其左子树进行顺时针右旋,C转上去成为B的根,这时变成了RR型,再进行RR型的逆时针左旋,如下图所示。
平衡二叉树之平衡调整图解_第5张图片
综上,LL型与RR型对称,LR型和RL型对称。我们可以由中序遍历(左->根->右)所得关键字序列自小到大有序来证明平衡调整的正确;另外,平衡二叉树的深度在插入结点前和插入结点并平衡调整之后是相同的。

你可能感兴趣的:(---,数据结构与算法,---)