平衡二叉树调整--LL-LR-RL-RR

链接:https://blog.csdn.net/qq_39207948/article/details/81201162

平衡二叉树调整
平衡二叉树简称平衡树,是由Adelson-Velskii和Landis于1962年首先提出的,所以又称为AVL树。他的定义很简单,就是若一棵二叉树的每个左右节点的高度差最多相差1,此二叉树即是平衡二叉树。把二叉树的每个节点的左子树减去右子树定义为该节点的平衡因子。二叉平衡树的平衡因子只能是1、0或者-1。

平衡二叉树是对二叉搜索树(又称为二叉排序树)的一种改进。二叉搜索树有一个缺点就是,树的结构是无法预料的,随意性很大,它只与节点的值和插入的顺序有关系,往往得到的是一个不平衡的二叉树。在最坏的情况下,可能得到的是一个单支二叉树,其高度和节点数相同,相当于一个单链表,对其正常的时间复杂度有O(lb n)变成了O(n),从而丧失了二叉排序树的一些应该有的优点。

当插入一个新的节点的时候,在普通的二叉树中不用考虑树的平衡因子,只要将大于根节点的值插入到右子树,小于节点的值插入到左子树,递归即可。而在平衡二叉树则不一样,在插入节点的时候,如果插入节点之后有一个节点的平衡因子要大于2或者小于-2的时候,他需要对其进行调整,现在只考虑插入到节点的左子树部分(右子树与此相同)。主要分为以下三种情况:

(1)若插入前一部分节点的左子树高度和右子树高度相等,即平衡因子为0,插入后平衡因子变为1,仍符合平衡的条件不用调整。

(2)若插入前左子树高度小于右子树高度,即平衡因子为-1,则插入后将使平衡因子变为0,平衡性反倒得到调整,所以不必调整。

(3)若插入前左子树的高度大于右子树高度,即平衡因子为1,则插入左子树之后会使得平衡因子变为2,这样的情况下就破坏了平衡二叉树的结构,所以必须对其进行调整,使其加以改善。

调整二叉树首先要明白一个定义,即最小不平衡子树。最小不平衡子树是指以离插入节点最近、且平衡因子绝对值大于1的节点做根的子树。

下面讲解平衡二叉树最基本的4种调整操作,调整的原则是调整后他的搜索二叉树的性质不变,即树的中序遍历是不会改变的:

  1. LL型调整。在B点的左子树上插入一个节点。插入后B点的左子树的平衡因子变为1,A节点的平衡因子变为了2。这样可以看出来A节点为根节点的子树是最小不平衡子树。调整时,将A的左孩子B向右旋转代替A称为原来不平衡子树的根节点,将A的节点右下旋转称为B的右子树的根节点,而B的原右子树变为A的左子树。详细过程如下图:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  2. RR型调整操作

在A节点的右孩子的右子树上插入节点,使得A节点的平衡因子由-1变为-2而引起的不平衡所进行的调整操作。调整操作大致一样,看图就可以明白了。
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

  1. LR型的调整操作。在A节点的左孩子的右子树上插入节点,使得A节点的平衡因子由1变为了2而引起的不平衡所进行的调整的操作。调整过程如图:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

解释:LR型先向左转再向右旋转。B先变为C的左子树,CL变为B的右子树;然后右旋的含义为A变成C的右子树,CR变为A的左子树。

  1. RL型的调整操作。不多说了,直接上图:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在二叉搜索树的插入和删除运算中,采用平衡树的优点是:使树的结构较好,从而提高查找运算的速度。缺点是:是插入和删除运算变得复杂化,从而降低了他们的运算速度。对二叉搜索树删除节点而引起的不平衡性进行的操作比插入节点的情况要复杂,在此就不再论述了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值