平衡二叉排序树--调整方法快速记忆方法(渣男丢妻弃子法)

平衡二叉排序树–调整方法快速记忆方法

首先我们先了解下什么是平衡二叉排序树。
平衡二叉排序树又称AVL树。一棵平衡二叉排序树或者是空树,或者是具有下列性质的二叉排序树:
①左子树与右子树的高度之差的绝对值小于等于1。
②左子树和右子树也是平衡二叉排序树。
引入平衡二叉排序树的目的,为了提高查找效率,其平均查找长度为O(log2n).
结点的平衡因子( Balance Factor)定义为:结点的左子树深度与右子树深度之差。显然,对一棵平衡二叉排序树而言,其所有结点的平衡因子只能是-1、0或1.当在一个平衡二叉排序树上插入一个结点时,有可能导致失衡,即出现绝对值大于1的平衡因子。
比如:

数据结构--用C语言描述(第二版)

数据结构–用C语言描述(第二版)

其次了解下需要调整的情况,一般情况下,只有新插入结点的祖先结点的平衡因子受影响,即以这些祖先结点为根的子树有可能失衡。下层的祖先结点恢复平衡,将使上层的祖先结点恢复平衡,因此应该调整最下面的失衡子树。因为平衡因子为0的祖先不可能失衡,所以从新插入结点开始向上,遇到的第一个其平衡因子不等于0的祖先结点为第一个可能失衡的结点,如果失衡,则应调整以该结点为根的子树。失衡的情况不同,调整的方法也不同。失衡类型及相应的调整方法可归纳为LL型、LR型、RR型、RL型四种。(LL型-RR型对称、LR型-RL型对称)

根据例子:
1.LL型
假设最低层失衡结点为A,在结点A的左子树的左子树插入新结点S后导致失衡,如图(a)所示。由A和B的平衡因子容易推知,BL、BR以及AR深度相同。为恢复平衡并保持二叉排序树特性,可将A改为B的右孩子,B原来的右孩子BR改为A的左孩子,如图(b)所示。这相当于以B为轴,对A做了一次顺时针旋转。
在这里插入图片描述

2.LR型
假设最低层失衡结点为A,在结点A的左子树的右子树插入新结点S后导致失衡,如图(a)所示。这里假设在C下插入S,如果是在CR下插入S,对树的调整方法相同,只是调整后A、B的平衡因子不同。由A、B、C的平衡因子容易推知,C1与C深度相同,B与AR深度相同,且B、AR的深度比C1、C的深度大1。为恢复平衡并保持二叉排序树特性,可首先将B改为C的左孩子,而C原来的左子C改为B的右孩子;然后将A改为C的右孩子,C原来的右孩子C改为A的左孩子,如图(b)示。这相当于对B做了一次逆时针旋转,对A做了一次顺时针旋转在这里插入图片描述
说实话由于数据结构难度本来就大,时间少,看了这么多一时间也记不住。所以我在理解的基础上考虑怎么方便记住。于是“渣男丢妻弃子法”就诞生了。

第一步:找失衡点,判断失衡类型。
第二步:找渣男–从插入新节点S往上找,谁是S的爷爷结点失衡谁就是渣男
在这里插入图片描述
第三步:“渣男丢妻弃子法”
1、先定义下:L为妻,R为子,双为留,单为丢(弃)。也就是说LL为留下L(妻),RR为留下R(子),LR,RL为L、R都不要(丢弃妻子)
在这里插入图片描述

2、公式:
LL型–弃子留妻,渣男高升,右边接盘 很简单哪边被丢弃了,哪边
RR型–丢妻留子,渣男高升,左边接盘 的根结点接盘)
LR型–丢妻弃子,渣男高升,左右接盘
RL型–丢妻弃子,渣男高升,左右接盘
在这里插入图片描述
例子:
LL型:
在这里插入图片描述

RL型:在这里插入图片描述
好了,我们的“渣男丢妻弃子 ”介绍完了,希望对大家有所帮助,如果以上内容有错,望指正。
本文指导教材:

数据结构–用C语言描述(第二版)耿国华

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

在这里插入图片描述

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值