AVL(平衡二叉树)

AVL定义

  • 左子树和右子树的高度之差的绝对值不超过1,高度之差也叫做平衡因子(Balance Factor),简称BF
  • 左右子树也都是平衡二叉树

当一个节点没有左子树时,左子树高度为-1
当一个节点的左子树时叶子节点时,左子树的高度为0
当一个节点的左子树的左子树是叶子节点时,左子树的高度为1
# 如图所示:
# 例1:
以2为根节点,左子树的高度为0,右子树的高度为1,0 - 1 = 1,满足平衡二叉树条件 -1 <= BF <= 1
# 例2:
以1为根节点,左右子树的高度都为-1,-1 - -1 = 0,满足平衡二叉树条件 -1 <= BF <= 1,叶子节点也是平衡二叉树
# 例3:
以3为根节点,左子树高度为-1,右子树高度为0,-1 - 0 = -1,满足平衡二叉树条件 -1 <= BF <= 1

AVL插入

  • 二叉平衡树在插入或删除一个结点时,先检查该操作是否导致了树的不平衡,若是,则在该路径上查找最小的不平衡树,调节其平衡。

  • 4种平衡调整如下:

LL(左左右单旋转)

# LL(左左)右单旋转,举例:
1、插入20后,导致50为根节点的树失衡(左子树高度为2,右子树高度为0,已40为根节点的树并没有失衡)
2、20节点在50的左子树上,最终也是在30的左子树上,在左左子树的左边节点,满足左左,进行右单旋转
3、右单旋转可以把树看做是一根链条,以50为支点,向右边拉动一格
4、旋转完成后,恢复平衡

RR左单旋转

# RR(右右)左单旋转,举例:
1、插入65后,导致40为根节点的树失衡(左子树高度为0,右子树高度为2,已50为根节点的树并没有失衡)
2、65节点在40的右子树上,最终也是在60的右子树上,在右子树的右边节点,满足右右,进行左单旋转
3、左单旋转可以把树看做是一根链条,以40为支点,向左边拉动一格
4、旋转完成后,恢复平衡

LR左右情况

# 无法通过一次旋转恢复平衡,先将左子树向左旋转一次,转换成LL型,再向右旋转
# 第一列:
1、插入42后,导致50为根节点的树失衡(左子树高度为2,右子树高度为0)
2、42插入在左子树的右子树上,将左子树向左旋转一次
3、此时满足了LL,向右旋转一次
4、恢复平衡

RL右左情况

# 无法通过一次旋转恢复平衡,先将右子树向右旋转一次,转换成RR型,再向左旋转
# 第一列:
1、插入43后,导致40为根节点的树失衡(左子树高度为0,右子树高度为2)
2、43插入在右子树的左子树上,将右子树向右旋转一次
3、此时满足了RR,向左旋转一次
4、恢复平衡

AVL平衡二叉树旋转详解相关推荐

  1. AVL树平衡旋转详解

    AVL树平衡旋转详解 概述 AVL树又叫做平衡二叉树.前言部分我也有说到,AVL树的前提是二叉排序树(BST或叫做二叉查找树).由于在生成BST树的过程中可能会出现线型树结构,比如插入的顺序是:1, ...

  2. UIDeviceOrientation 和 UIInterfaceOrientation 设备旋转的用法 (实例)  和 IOS6屏幕旋转详解

    1. UIDeviceOrientation 和 UIInterfaceOrientation 设备旋转的用法 (实例) 博客分类: IOS / Objective-C UIDeviceOrienta ...

  3. Unity史上最全旋转详解(Rotate,rotation,localEulerAngles,localRotation,万向节锁)

    Unity史上最全旋转详解 前言 旋转的方法Rotate以及五种重载参数的超级详细理解 Rotate(float xAngle, float yAngle, float zAngle); Unity绕 ...

  4. 平衡二叉树(AVL)平衡化旋转详解

    一.平衡二叉树 1.为什么要引入平衡二叉树 平衡二叉树的全称是平衡二叉排序树,也称为AVL树,这是因为该树结构是由Adelson-Velskii和Landis在1963年提出的.AVL树是BST树的改 ...

  5. 数据结构:关于AVL树的平衡旋转详解

    前言 本文是基于你已经有一定的二叉排序树知识.如果你还是小白,可以参考我之前的博客:<数据结构:二叉搜索树(BST)的基本操作>.所以,在本文中不会再出现关于BST树的基本知识. 版权说明 ...

  6. 【数据结构】平衡二叉树的调整(RR LL LR RL)旋转详解讲解

    平衡二叉树的调整 旋转的命名规则 RR旋转(右单旋) LL旋转(左单旋) LR旋转(左右旋转) RL旋转(右左旋转) 旋转的命名规则   如图初始插入节点Nov后,Mar节点的平衡因子(左右两个子树的 ...

  7. 用c语言编译二叉树,C语言 数据结构平衡二叉树实例详解

    数据结构平衡二叉树 参考代码如下: /* 名称:平衡二叉树 语言:数据结构C语言版 编译环境:VC++ 6.0 日期: 2014-3-26 */ #include #include #include ...

  8. IOS6屏幕旋转详解(自动旋转、手动旋转、兼容IOS6之前系统)

    转自 http://blog.csdn.net/zzfsuiye/article/details/8251060 概述: 在iOS6之前的版本中,通常使用 shouldAutorotateToInte ...

  9. 【OpenCV】图像旋转详解,边缘用黑色填充

    项目要用到图像旋转,OpenCV里面居然没有专门封装好的函数,只好自己写了.根据<learnning OpenCV>发现效果不是很理想,旋转后图像大小不变,可是图像却被裁减了. 例子如下: ...

最新文章

  1. 【收藏】Java多线程/并发编程大合集
  2. ios获取新数据要不要关_ios获取新数据要不要关
  3. Docker上部署MariaDB
  4. 怎样把ACCESS导入SQL数据库
  5. 花式Finetune方法大汇总
  6. 4.企业应用架构模式 --- Web表现层
  7. 文华软件怎样测试交易系统的收益,交易系统的测试与评估报告
  8. Java证书工具keytool用法总结
  9. matlab polyfit和polyval函数的使用
  10. win10无法正常弹出移动硬盘/U盘
  11. tan和cot的梗_“sin对cos说 我们今晚是tan呢?还是cot呢?”啥意思
  12. Discuz!模板解析语法
  13. 技巧分享篇---如何从GitHub上下载某个项目中单个文件的方法
  14. 数据库防火墙应具备哪些能力
  15. Beta冲刺第二周王者荣耀交流协会第五次会议
  16. 终于,“亚麻百货”也要来了!
  17. 「 科研经验 」思考“工程解决方案”的思维
  18. REGEXP_REPLACE 函数
  19. java实现word文件合并
  20. 2021沭阳中学高考成绩查询,2021年沐阳县高考状元名单资料,今年沐阳县高考状元多少分...

热门文章

  1. 高通ais cam.xml配置
  2. PS中Ctrl+Alt+G创建剪贴蒙版
  3. python爬虫入门:在命令行搜索并下载小说
  4. Python爬取网易云音乐歌手歌曲和歌单(爬虫)
  5. 【卡塔尔世界杯】从足球战术看Scrum敏捷流程的3大核心优势
  6. DVWA全级别-双向规则编写
  7. Python深度学习入门笔记(二):使用Pandas读取批量CSV文件,文件名中有顺序变量
  8. ChatGPT中文版源码
  9. 小学六年级下册计算机授课内容,清华大学出版社版小学六年级下册信息技术教案课程.doc...
  10. 有声专栏-宏基因组专业词汇讲解——001宏基因组