平衡二叉树(AVL)的4种插入调整过程

平衡二叉树(AVL)的4种插入调整过程
平衡二叉树定义:
在插入中为了保证二叉排序树的性能,规定在插入和删除二叉树结点时,要保证任意结点的左、右子树的高度差的绝对数值不超过1,这样的二叉树被称为平衡二叉树(Balanced Binary Tree),简称平衡树(AVL)。

平衡二叉树的插入:
我们知道,进行插入和删除操作时势必会对树的整体的造成的一定的影响,树的结构发生一定的变化,如果这种变化没有对数的平衡性造成影响还好,倘若造成了影响该如何解决呢?下面我将结合我这段时间对数据结构的复习,通过一个开胃小菜来大概看一下对平衡二叉树的插入过程,简单感受一下这是怎么回事

开胃小菜:

将关键字1,2,3,4,5依次插入初始为空的平衡二叉树T中

操作过程如下图:

先依次按照规则插入关键字1,2,3,当插入3时发现头结点处的平衡因子遭到破会值为-2,这时我们需要做出调整。因为头节点处的平衡因子为-2,我们希望平衡因子的绝对值小于1,因此我们需要把1这个节点往左边树那侧旋转,使得平衡因子绝对值减小,1往左旋,会使得2所在的结点的位置提高,从而得到了第3个箭头所指的那个经过调整后的图。

继续进行插入操作,当插入到5时不难发现右子树的平衡因子也遭到了破坏,关键字2,3结点处的平衡因子值均为-2,那么此时应该以哪个结点作为旋转结点呢?在进行调整的过程中均以最小不平衡子树作为调整对象,那么什么是最小不平衡子树呢?即以插入点路径上距离插入点最近的平衡因子绝对值大于1的结点,因此在本次操作中需要对关键值为3的节点处进行调整。因为该处平衡因子为-2,为了使平衡因子绝对值减小,该结点也需要向左选择,从而得到了最后一个箭头所指的图。

通过这个开胃小菜,大概可以了解一下平衡二叉树的插入是怎样的一个过程,对此有个感性的认识,那么接下来就进入理性的分析阶段吧!

4种调整方式(LL、RR、LR、RL)
LL平衡旋转(右旋转)

所谓的LL平衡旋转是指在结点A的左孩子(L)的左子树(L)上插入了新的结点造成了不平衡,所以对这种不平衡的调整叫做LL平衡旋转。

如上图(b)所示A处的平衡因子为2,违背了平衡二叉树原则因此需要对该树进行调整,为了使A处的平衡因子绝对值减小,需要增加该结点处右侧的树,这样才能达到减小平衡因子绝对值的目的,因此将A向右移,因为A向右下方移动相应的带动B向右移动使得B成为了根节点。

在这里说一个小细节,B在运动的过程中B原来的右子树发生了变化,调整好后跑到了A的左子树,在这里可以简单分析一下。因为必须满足二叉树的要求,B发生移动后成为根节点,但此时上面有三个子树BL、BR、A,通过大小排序可以知道BR>B同时BR<A,因此移到A的左子树上。为了应对考试可以这样简单记忆:当树需要LL平衡旋转(右旋)时,多于的结点也右移,连接到最小不平衡子树的根节点,本图中为A。

2.RR平衡旋转(左旋转)

RR平衡旋转和LL一样,是因为新插入的结点位于右孩子的右子树上,如下图所示:

这个图片中的情况就是之前开胃小菜中所提的那种,在此不做赘述。下面我对以上这两种情况说一下考试用的小技巧:在上面的两种情况不难发现,LL情况下平衡因子的数值为正数,且他的下一个结点为非负数。RR情况也是如此,如上图A、B的平衡因子分别为-2,-1,由此有个做题的小技巧: 平衡因子为正,则右旋;平衡因子为负,则左旋。其实这也是平衡二叉树的性质所决定的。

3.LR平衡旋转(先左后右旋转)

LR平衡旋转是因为在左孩子的右子树插入新的结点导致书不平衡而进行的调整,通过上面的情况不难知道既然有LR那么肯定还有RL的情况,对于RL的情况因为于LR原理相似,就不再介绍,下面接着说LR平衡旋转。

通过图(b)知道因为插入C结点使得A平衡二叉树不再平衡,要做出调整首先要找出最小不平衡树,图中以A为根结点的树即是。图中A、B的平衡因子分别为2,-1,为了平衡应使A、B的平衡因子值保持同号,因为-1更接近于正数,因此先移动B,结果如下图。再根据正则右转,经调整最终得到了上上图(c)的结果。

总结:
最后总结一下调整的步骤:

每做一次插入或删除操作分析一下平衡因子

根据平衡因子找到最小不平衡树

确定属于4种类型的哪一种

具体问题具体分析

(写的不正确之处还请不吝赐教,谢谢!)
————————————————
版权声明:本文为CSDN博主「江月尽」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42156796/article/details/95386628

点赞
  1. inspiraton说道:
    Google Chrome Windows 10

    giao! :haha:

发表评论