先看两个平衡树中的名词:结点的平衡因子,最小不平衡子树。

  • 平衡因子 = 结点左子树的高度 - 结点右子树的高度。
  • 最小不平衡子树:以离插入结点最近的平衡因子绝对值大于1的结点为根的子树。

只有任一子树的平衡因子是-1,0,1时才是平衡树,否则需要进行调整,每次调整的都是最小不平衡子树。这句话不仅指示了调整的方向,也表达了调整可能不止一次。

而需要调整的情形总共分为4种。

  • LL型
  • RR型
  • LR型
  • RL型

具体解释起来就是按照二叉排序树的构建方式插入一个结点时,如果插入的位置是最小不平衡子树根结点的左(L)结点的左(L)子树,那么我们称之为LL型不平衡,物极必反,所以可见两个L时是太左了,因此往右旋转。

同理可得RR型是往左旋转。

LL型和RR型是一眼可以看出解法的类型。真正想说的是LR型和RL型,这两类是较为复杂的,因此,旋转的策略需要接受指引,而这个指引恰恰就蕴含在名字中,即:如LR型,先对最小不平衡子树一次左旋,再对最小不平衡子树一次右旋。注意两次最小不平衡子树是不一样的,动态变化。
更加需要注意的是LR型中先左旋时三个结点中最低的那个结点左孩子要交给它现在的父结点,右旋时它的右孩子要交给第一次调整后的它的父亲结点。这是底层的奋斗要抛弃自己的所有东西才能获得真正的地位。

同理RL型的也是根据名称指引的顺序,先向右旋转,再往左旋转。

听着名字好像是转回来了,实际不是,因为第一次旋转解决的是子树的不平衡,第二次是解决全局的不平衡。

看一道题目梳理一下,需要仔细看,不然很容易跟着直观感受看错。

如图所示的平衡二叉树中插入关键字48后得到一颗新的平衡二叉树,在新平衡二叉树中,关键字37所在结点的左右子结点中保存的关键字分别是(C)
A. 13,48
B. 24,48
C. 24,53
D. 24,90

很容易看成是53是最小不平衡树的根结点,实际上24才是。因此调节主要是24,53,37三个结点的关系。有一个快速解题的规律是37要上位成为24和53的父亲,且24和53的左右相对位置不变。可以快速得到C项。

动手画图解题方法如下:
插入的48是在24的右结点的左子树,因此是RL型,所以有一次小的右转和一次稍微大些的左转。

一次右转如下,因为有右孩子,所以右孩子要交给它当前的父亲,调整完它的父亲要变成自己儿子了。

再左转,37没有左孩子,所以不用交给它现在的父亲结点。

平衡树插入调整的记忆策略相关推荐

  1. jvm gc策略_IBM JVM调整– gencon GC策略

    jvm gc策略 本文将向您详细介绍从Java虚拟机(例如HotSpot或JRockit)迁移到IBM JVM时重要的Java堆空间调整注意事项. 此调整建议基于我为我的一个IT客户端执行的最新故障排 ...

  2. IBM JVM调整– gencon GC策略

    本文将向您详细介绍从Java虚拟机(例如HotSpot或JRockit)迁移到IBM JVM时重要的Java堆空间调整注意事项. 该调整建议基于我为我的一个IT客户端执行的最新故障排除和调整任务. I ...

  3. 红黑树的插入调整情况分析

    红黑树满足的性质: 所有结点不是红的就是黑的 根结点是黑色的 不能有连续的红色结点 每一条从根到叶子结点(空结点)的路径上,黑色结点数量相同 所有的叶子结点(空结点)都是黑色的 插入后需要调整情况 构 ...

  4. 二叉平衡树的插入和删除操作

    [转载]二叉平衡树的插入和删除操作 1.      二叉平衡树 二叉排序树查找.插入和删除操作的时间复杂度和树的深度n有关.构建树时,当先后插入的结点按关键字有序时,二叉排序树退化为单枝树,平均查找长 ...

  5. AVL平衡树的插入例程

    /* **AVL平衡树插入例程 **2014-5-30 11:44:50 */avlTree insert(elementType X, avlTree T){if(T == NULL){T = ma ...

  6. 莫古力最新服务器,《最终幻想14》将调整现有人口平均化策略

    <最终幻想14>于昨日(5月25日)发布了服务器人口平均化策略更新公告,表示将从5月27日14:00点关闭陆行鸟区.猫小胖区的角色创建功能,开放莫古力区的角色创建功能.另外,官方还分享了& ...

  7. 一种个性化的情感记忆模型

    A Personalized Affective Memory Model for Improving Emotion Recognition icml2019论文链接:https://arxiv.o ...

  8. Hibernate标识符属性(主键)生成策略全析

    数据库中的主键能够唯一识别一条记录,它可以是一个字段也可以是多个字段的组合.主键的主要作用是标识表中的一条记录,还有和其他表中的数据进行关联.数据库中的主键类型必须符合唯一性约束和非空约束.作为附加属 ...

  9. 【bzoj2555】Substring【后缀平衡树入门】

    传送门 (bzoj上不去我也很无奈啊) 题意:维护一个字符串,支持后面加字符串,给定串询问出现次数.强制在线. 数据范围:暴力跑不过 前置知识:重量平衡树 众所周知,平衡树都用了一些策略保证平衡. 平 ...

最新文章

  1. Oracle不带传出参数的存储过程创建及调用
  2. java简单计算_java简单计算器
  3. HttpServletResponse和HttpServletRequest详解——Web网络学习笔记
  4. dedeCMS 会员中心注册登陆页面 - 模板修改
  5. java关键字有多少?
  6. 隐藏桌面上计算机图标不见了怎么办,隐藏桌面我的电脑图标不见了怎么办
  7. 《Java性能优化权威指南》读书笔记
  8. 详解EMC测试国标GB/T 17626
  9. Anaconda离线安装pkgs
  10. 使用QianWei网站源码配合cpolar,发布本地音乐分享网站
  11. Python项目实战(三):爬取东方财富热门股票数据
  12. Visual Studio安装及下载
  13. 手机NFC识别跟看门狗(韦根26)识别卡片的id区别
  14. 公开招标和邀请招标的区别
  15. 【BLE】CC2541之RSSI
  16. spellman电源维修PCM70N120高压发生器维修
  17. 自考-知识点总结-数据库系统原理 04735
  18. Linux随笔2 - Linux的目录配置、文件元数据信息、符号链接与硬链接和常用文件和目录管理命令示例
  19. 倚天+飞天+CIPU强势组合,数据库融合自研硬件体系,阿里云又放大招
  20. 程序员军刀之 sox

热门文章

  1. 《The C programming language》学习笔记
  2. android 程序 共享文件,026 Android多进程-文件共享
  3. php 列表收缩展示插件,可展开和收缩的jquery FAQ问答列表特效
  4. python模拟app抢票_亲测,手把手教你用Python抢票
  5. 零基础python数据分析自学_零基础的人,怎么自学数据分析?
  6. java文件指针,Java 测试文件指针,java测试指针,两种方法打开文件并进行内
  7. beanstalkd mysql_beanstalkd 安装和配置
  8. rds mysql_Amazon RDS上MySQL
  9. Django ModelForms
  10. jquery按名称选择_jQuery按类别选择