当前位置:网站首页>AVL平衡二叉树及其4种旋转方式
AVL平衡二叉树及其4种旋转方式
2022-04-21 18:22:00 【Adsh】
1.AVL平衡二叉树:二叉树中每个节点的左子树和右子树高度之差的绝对值小于等于1。


2.平衡因子=左子树的高度-右子树的高度。AVL树的平衡因子只有-1,0,1。

3.右旋转 LL
旋转前特征:
1)节点a为不平衡的节点。
2)节点b和节点c为在高度较高的路径上,从a开始的接下来的两个节点。
3)y1,y2,y3和y4代表节点a,节点b,节点c的子节点或者子树。可以为null,可以为叶子结点,也可以为节点数>1的一个二叉树。
4)节点b是节点a的左孩子。节点c是节点b的左孩子。

旋转后的特征:
1)节点b变成根节点
2)原来的根节点a变成节点b的右孩子
3)y3变成节点a的左孩子。【如果y3不为空,由于之前y3是节点b的右孩子,现在节点a变成节点b的右孩子。因为b<y3根节点的值<a,节点a变成节点b的右孩子后,节点a并没有左孩子。所以当y3变成节点a的左孩子后,也同样满足b<y3根节点的值<a。】
4)y1,y2,y4和父节点的关系都不发生变化。

4.左旋转RR
旋转前特征:
1)节点a为不平衡的节点。
2)节点b和节点c为在高度较高的路径上,从a开始的接下来的两个节点。
3)y1,y2,y3和y4代表节点a,节点b,节点c的子节点或者子树。可以为null,可以为叶子结点,也可以为节点数>1的一个二叉树。
4)节点b是节点a的右孩子。节点c是节点b的右孩子。

旋转后的特征:
1)节点b变成根节点
2)原来的根节点a变成节点b的左孩子
3)y2变成节点a的右孩子。【如果y2不为空,由于之前y2是节点b的左孩子,现在节点a变成节点b的左孩子。因为a<y2根节点的值<b,节点a变成节点b的左孩子后,节点a并没有右孩子。所以当y2变成节点a的右孩子后,也同样满足a<y2根节点的值<b。】
4)y1,y3,y4和父节点的关系都不发生变化。

5.先左旋后右旋LR
旋转前特征:
1)节点a为不平衡的节点。
2)节点b和节点c为在高度较高的路径上,从a开始的接下来的两个节点。
3)y1,y2,y3和y4代表节点a,节点b,节点c的子节点或者子树。可以为null,可以为叶子结点,也可以为节点数>1的一个二叉树。
4)节点b是节点a的左孩子。节点c是节点b的右孩子。

step1:左旋操作

step2:右旋操作
将step1的结果进行右旋操作

6.先右旋后左旋RL
旋转前特征:
1)节点a为不平衡的节点。
2)节点b和节点c为在高度较高的路径上,从a开始的接下来的两个节点。
3)y1,y2,y3和y4代表节点a,节点b,节点c的子节点或者子树。可以为null,可以为叶子结点,也可以为节点数>1的一个二叉树。
4)节点b是节点a的右孩子。节点c是节点b的左孩子。

step1:右旋操作

step2:左旋操作

版权声明
本文为[Adsh]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_21388535/article/details/105588488
边栏推荐
- In order to offer several big factories, "closed door practice"
- MySQL——远程连接非本地MySQL数据库服务器,报错ERROR 1130: Host 192.168.3.100 is not allowed to connect to this MySQL s
- After fastjson is automatically upgraded to fastjson2, the idea development environment is normally printed into a jar package and an error exception POM is reported after publishing the generated env
- 干货|app自动化测试之Appium 原理 与 JsonWP 协议分析
- Lovely Tommy C language
- Redis-benchmark性能测试工具使用详解
- Assignment and value of WPF RichTextBox
- Summary of mongodb user permissions
- CDF全球调查:软件交付性能停滞不前
- ES6新特性(1)之let命令/const命令/解构赋值/Symbol/Set/WeakSet
猜你喜欢

Detailed explanation of kubernetes (IV) -- kubernetes deployment based on kubedm

Target penetration exercise 70-dc2
Goodbye SharedPreferences, hello mmkv!

年末我的Android面试复盘

Huawei level 18 Daniel collates and summarizes: microservice design and distributed service framework principle practice document

终于有人讲明白了!原来这才是全球低时延一张网技术

C语言操作符汇总

单例模式你不得不知道的底层原理

Redis-benchmark性能测试工具使用详解

In order to offer several big factories, "closed door practice"
随机推荐
你已经用 SharedPrefrence 的 apply() 替换 commit() 了吗?
You must understand and can understand microservice series 3: service invocation
Redis三种特殊数据类型——Hyperloglog基数统计
Assignment and value of WPF RichTextBox
Detailed explanation of kubernetes (IV) -- kubernetes deployment based on kubedm
靶机渗透练习78-Thoth Tech
[牛客网刷题 Day4] JZ23 链表中环的入口结点
【网络】4G、5G频段汇总
启牛app证券账户安全吗?谁在这开了?
How can the manufacturing industry save itself under the crisis of insufficient personnel and broken supply chain?
lap库安装
Dry goods | who understands this article and can get stuck playing games?
年末我的Android面试复盘
Target penetration exercise 75-dc7
包装类
再见SharedPreferences,你好MMKV!
干货 | 读懂 Appium 日志,让测试效率翻倍!
In order to offer several big factories, "closed door practice"
Target penetration exercise 80 momentum: 1
About LINQ statements