浙江大学讲解视频

平衡二叉树(AVL)的定义

  • 任一结点的左右子树高度差的绝对值小于等于1,绝对值就是平衡因子
  • 任一结点的左右子树均为AVL树
  • 平衡二叉树也可以是一个空树

平均查找长度(ASL)(查找效率) (ASL=所有查找次数X*查找次数为X的结点数相加)/总结点数
例:


平衡二叉树的调整

当向一棵AVL树中插入一个新的结点,有可能会破坏树的平衡,这时就需要调整这棵树,根据不同的插入位置,一共有四种调整方法,在调整的过程中要注意,一定要满足二叉搜索树的性质

插入位置 如何调整
插入结点在发现者右子树右边 RR调整,右单旋
插入结点在发现者左子树左边 LL调整,左单旋
插入结点在发现者左子树右边 LR调整,左右双旋
插入结点在发现者右子树左边 RL调整,右左双旋

注,发现者是第一个不满足这棵树是平衡二叉树的结点,如果有多个结点同时不满足,就选最靠近下面的那个结点作为发现者


右单旋(RR调整)

插入结点在发现结点的右子树的右边

插入13时发现5的平衡因子被破坏了,破坏者在发现结点右子树的右边,所以应该对这棵树进行右单旋(RR单旋),让树向左边转,在旋转过程中让被破坏者的右子树作为调整后的跟结点.在调整过程中发现8这个结点会有冲突,那么就按照二叉搜索树的性质将8放在5的右边,调整结果如下


左单旋(LL调整)

插入结点在发现结点左子树的左边

插入2时发现4和5同时为发现者,这时就选择距离插入结点较近的点作为发现者。因为插入结点在发现者左子树的左边,所以应该对这棵树进行左单旋(LL单旋),让树向右边转,调整结果如下


左右双旋(LR双旋)

插入结点在发现结点左子树的右边

一定要记得先右单旋,再左单旋,以4这棵树右单旋以后结果如下

发现这棵平衡二叉树还不平衡,再以5这棵树左单旋,结果如下


右左双旋(RL双旋)

插入结点在发现结点右子树的左边

一定要记得先左单旋,再右单旋,以6这棵树左单旋以后结果如下

发现这棵平衡二叉树还不平衡,再以3这棵树右单旋,结果如下


注意:在双旋过程中,注意不要让双旋的名称误解了,名称仅仅是表示插入结点相对于发现结点的位置,左右双旋是先右单旋左单旋右左双旋是先左单旋右单旋

如有错误之处,欢迎评论

平衡二叉树的调整(详解 LL、RR、LR、RL)相关推荐

  1. 王者荣耀体验服服务器未响应9月16,王者荣耀体验服9月16日更新维护及英雄调整详解介绍...

    王者荣耀体验服9月16日更新了什么?相信很多小伙伴们都非常的期待吧,本次更新对部分的英雄进行了一系列的改动,下面是小编带来的王者荣耀体验服9月16日更新维护及英雄调整详解,感兴趣的一起来看下吧! 王者 ...

  2. 巅峰战舰今日服务器全部维护,巅峰战舰12月7日更新维护公告 12.7新增玩法和舰船属性调整详解[图]...

    类型:策略卡牌 大小:827.38MB 评分:10 平台: 巅峰战舰今天进行了临时维护更新,具体更新了什么内容?估计小伙伴们不太清楚,没关系,下面是小麦整理出来的12.7新增玩法和舰船属性调整详解,希 ...

  3. 王者服务器维护8.25,上单位移全部削弱射手春天到来!王者荣耀体验服8.25英雄调整详解...

    王者荣耀体验服8月25号进行了一波更新!对于现在主流的上单战士的位移能力全部削弱,几乎无一幸免,虽然补偿了几个英雄的爆发伤害,但是喜闻乐见的是花木兰和宫本却只削弱没加强!一起俩看看本次改动的详解吧! ...

  4. 平衡二叉树(AVL树)-详解平衡调整

    平衡调整: (注意:平衡调整只是平衡调整,没有进行结点的插入) LL型调整: (带阴影的小框表示插入的结点) 代码如下: AVLNode *AVLTree::LL_Rotate(AVLNode *a) ...

  5. (王道408考研操作系统)第二章进程管理-第二节4:调度算法详解2(RR、HPF和MFQ)

    文章目录 一:时间片轮转调度算法(RR) 二:优先级调度算法(HPF) 三:多级反馈队列调度算法(MFQ) 总结 进程调度算法也称为CPU调度算法,操作系统内存在着多种调度算法,有的调度算法适用于作业 ...

  6. (王道408考研操作系统)第二章进程管理-第二节6、7:调度算法详解2(RR、HPF和MFQ)

    文章目录 一:时间片轮转调度算法(RR) 二:优先级调度算法(HPF) 三:多级反馈队列调度算法(MFQ) 总结 进程调度算法也称为CPU调度算法,操作系统内存在着多种调度算法,有的调度算法适用于作业 ...

  7. CSS字体样式调整详解

    大家好,今天分享一下CSS字体样式调整 我们对文本样式做以下的调整 1.颜色 2.文本对齐的方式 3.首行缩进 4.行高 5.装饰 写HTMl代码: <!DOCTYPE html> < ...

  8. BGP 路由反射器详解,RR反射簇与RR的防环机制介绍与实验

    一.什么是RR RR(Route Reflector):路由反射器 由于水平分割的原因,为了保证AS内所有的BGP路由器都能学习到完整的BGP路由,就必须在AS内实现IBGP全互联. 然而实现IBGP ...

  9. AVL树(LL,RR,LR,RL)

    AVL树是最早发明的自平衡二叉搜索树之一. 平衡因子(Balance Factor):某结点的左右子树的高度差 AVL树的特点 每个结点的平衡因子只可能是1,0,-1(绝对值<=1,如果超过,称 ...

最新文章

  1. ConcurrentHashMap实现原理及源码分析
  2. linux c++编写访问mysql程序,访问数据库出错,解决方法
  3. Cloudify — Overview
  4. net use命令详解
  5. 优酷开放SDK之setOnTimeOutListener
  6. Android应用程序签名详解
  7. Convolutional Neural Networks for Visual Recognition 1
  8. 2021双11上云狂欢节 | 爆款产品底价全面开售
  9. 安卓开发mysql数据库_Android编程之数据库的创建方法详解
  10. python consul
  11. 【模板】线段树(区间加)
  12. Unity3D AssetBundle相关
  13. 在Ubuntu 20.04(含Xubuntu、Linux Mint Cinnamon等衍生版)上安装Wine QQ,获得更佳的使用体验
  14. 2020年面向前端开发人员的10个很棒的 JS 库
  15. PLA-PEG2000-Maleimide,聚乳酸和马来西安亚楠修饰的PEG,MAL-PEG2000-PLA
  16. Linux内核kernel panic机制浅析
  17. php项目怎么配置admin,PHPadmin配置
  18. 家谱树 (并查集拓扑排序)
  19. 华为模拟器配置S5700交换机OSPF案例
  20. 1.pygame简介

热门文章

  1. yum是干什么的_刨根问底:什么是yum源,yum的工作原理又是什么
  2. 基于xlsx-populate实现的前端埋点导出
  3. oracle 此处不允许序号
  4. 获取ZoneId 收录的时区和偏移量
  5. contiki之list头文件
  6. conda SSL错误 SSLError,爬虫应用总结
  7. vue的网站用puppeteer做seo
  8. EBS开发_fnd_message使用
  9. springAop遇到的问题
  10. 【Anaconda】修改conda默认envs_dirs和pkgs_dirs