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

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

数据结构–用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语言描述(第二版)耿国华


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

  1. linux - tar压缩解压缩使用,快速记忆方法

    linux常用的指令中,属压缩/解压缩最容易记混.分享一个快速记忆方法,使用最常用.且功能也比较全的 tar命令. 1. tar 基本参数 -v :显示操作过程(大多数情况都会加上) -f :指定压缩 ...

  2. Linux 常用命令及快速记忆方法

    Linux 常用命令及快速记忆方法 所有的命令都是英语的简写,那么对于记忆来说,我们只要知道是哪些单词的简写就可以轻而易举地记住啦 最基础的: ls.cd.pwd.mkdir.rm.rmdir.mv. ...

  3. MySQL select五个子句顺序及其快速记忆方法

    写在前面:在初学select的时候总是记不住这五个子句, 本文章仅针对初学者, 或者多次记忆又忘了的人群.一次性永久解决这五个子句的记忆问题. 具体五个子句的含义这里就不写了,可以出门左转搜一下. 本 ...

  4. 51单片机指令快速记忆方法总结

    MCS-51是指由美国INTEL公司生产的一系列单片机的总称,这一系列单片MCS-51是指由美国INTEL公司生产的一系列单片机的总称,这一系列单片机包括了好些品种,如8031,8051,8751,8 ...

  5. 关于linux的vi命令快速记忆方法

    linux的vi命令是linux操作最基本的文本工具,主要采用快捷方式,本文说说如何快速记忆. 一.    三个工作状态 1.        命令状态 任何时候ESC键,都可以进入命令状态. 2.   ...

  6. 五十音三天快速记忆方法汇总

    1* あ ア a 'あ'看上去像是一个武术高手施展了一个扫堂腿,敌人肯定被扫得冷落花流水,啊的一声倒下去啦,所以读a.'ア'片假名指示出了你发音的样子,嘴巴张开,舌头放到下面,a. 2* い イ i ...

  7. 三阶魔方中心块调整配方和记忆方法

    你并不需要将普通三阶魔方中心块,字魔方或者拼图魔方等须要调整中心块的角度. 所以拼图三阶或者数字三阶,都能够在普通三阶魔方的基础之上,再加上例如以下公式,便能够转好. 1.顶面中心块旋转180° UR ...

  8. js 逻辑与 逻辑或 快速记忆方法

    逻辑与 逻辑或 操作可以应用于任何类型的操作数,而不仅仅是布尔值. alert(true&&false); // false alert(true&&true); // ...

  9. Javascript Array对象 sort()方法,记忆方法,方法扩展

    相信 有很多 同仁们,尤其是初学者,在记住 Array对象 sort() 方法的排序,规则上,有点困难: 其实sort()方法已经在实际工作中用到很多遍了,可当我仔细推敲,这个sort()方法,什么时 ...

最新文章

  1. CORBA/DCOM使用协议
  2. linux 排程命令,Ubuntu 排程設定 :Crontab 排程使用教學
  3. windows2003中mssql连接的NT AUTHORITY\NETWORK SERVICE登录失败的问题
  4. cgroup代码浅析(2)
  5. 适合创业团队使用的团队协作工具大盘点
  6. h5外卖源码php_校园食堂外卖APP走红 更多APP定制开发上一品威客网
  7. 524. 通过删除字母匹配到字典里最长单词
  8. 查看Chome浏览器中已保存的密码
  9. 两大微服务框架dubbo和spring cloud对比
  10. 某个目录下产品根据创建时间下架
  11. Python-2 eval函数
  12. 流量计算机标准,-流量计执行标准
  13. DropdownMenu 下拉菜单的使用
  14. python批量下载bilibili视频_python批量提取哔哩哔哩bilibili视频
  15. 华硕fl8000u主板怎么拆_华硕顽石4笔记本 FL5900U如何打开后盖
  16. windows10系统没有声音
  17. Materials Studio画苯环
  18. aspose 换行写_Aspose.Words对于Word的操作
  19. Altium Designer10铺铜技巧小结
  20. 本人以及硕士期间研究介绍

热门文章

  1. 【DevOps】持续集成
  2. 一种互联网项目开发方式
  3. Unity 水、流体、波纹基础系列(三)——波浪(Waves)
  4. Java简单搭建免签个人支付宝当面付收款接口,无需挂APP,官方接口无风险
  5. 高精度加减法的应用——试解大数之和
  6. 别只会搜日志了,求你懂点原理吧(超详细)
  7. 川大计算机考研英语要求,请问如果考研,四川大学的英语要求高么??属于哪..._考研_帮考网...
  8. NI labview2014/2015/2016的超快速入门教程之使用VI模板(培训一)
  9. Linux系统进阶-基础IO
  10. 从后台得到webshell十大技巧大汇总