当前位置:网站首页>平衡二叉树(AVL)
平衡二叉树(AVL)
2022-07-07 14:11:00 【锡兰_CC】
目录
平衡二叉树的定义
Q:什么是二叉排序树
A:二叉排序树或者是一棵空树,或者是具有如下性质的二叉树
- 1)若它的左子树不空,则 左子树 上所有结点的值 均小于 它的根结点的值
- 2)若它的右子树不空,则 右子树 上所有结点的值 均大于 它的根结点的值
- 3)左、右子树也分别是一棵二叉排序树
Q:什么是平衡二叉树
A:它或者是一颗空树,或者是具有以下性质的二叉排序树:它的左子树和右子树的深度之差的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。
定义结点左子树与右子树的高度差为该结点的平衡因子,则平衡二叉树结点的平衡因子只可能是 -1,0,1。
平衡二叉树的插入
每当在二叉排序树中插入(或删除)一个结点时,首先要检查其插入路径上的结点是否因为此次操作而导致了不平衡。若导致了不平衡,则先找到路径上离插入结点最近的平衡因子的绝对值大于1的结点 A,再对以 A 为根的子树,在保持排序树特性的前提下,调整各结点的位置关系,使之重新达到平衡。
平衡二叉树的插入过程的前半部分与二叉排序树相同,但在新结点插入后,若造成查找路上的某个结点不再平衡,则需要做出相应的调整。可将调整的规律归纳为下列4种情况:
LL平衡旋转(右单旋转)
由于在结点A的左孩子(L)的左子树(L)上插入了新结点,A 的平衡因子由 1 增至 2 ,导致以 A 为根的子树失去平衡,需要一次向右的旋转操作,将 A 的左孩子 B 向右上旋转代替 A 成为根结点,将 A 结点向右下旋转成为 B 的右子树的根结点,而 B 的原右子树则作为 A 结点的左子树。
RR平衡旋转(左单旋转)
由于在结点 A 的右孩子(R)的右子树(R)上插入了新结点,A 的平衡因子由 −1 减至 −2,导致以 A 为根的子树失去平衡,需要一次向左的旋转操作。将 A 的右孩子 B 向左上旋转代替 A 成为根结点,将 A 结点向左下旋转成为 B 的左子树的根结点,而 B 的原左子树则作为 A 结点的右子树的。
LR平衡旋转(先左后右双旋转)
在 A 的左孩子(L)的右子树(R)上插入新结点,A 的平衡因子由1增至2,导致以 A 为根的子树失去平衡,需要进行两次旋转操作,先左旋转后右旋转。先将 A 结点的左孩子 B 的右子树的根结点 C 向左上旋转提升到 B 结点的位置,然后把该 C 结点向右上旋转提升到 A 结点的位置。
RL平衡旋转(先右后左双旋转)
由于在 A 的右孩子(R)的左子树(L)上插入新结点,A 的平衡因子由 −1减至 −2,导致以 A 为根的子树失去平衡,需要进行两次旋转操作,先右旋转后左旋转。先将 A 结点的右孩子 B 的左子树的根结点 C 向右上旋转提升到 B 结点的位置,然后把该 C 结点向左上旋转提升到 A 结点的位置。
平衡二叉树的构建
假设关键字序列为{6,1,2,5,4,3},通过该序列生成二叉排序树的过程如下:
第一步:创建一个空树
第二步:插入结点 6
第三步:插入结点 1
第四步:插入结点 2
第五步:LR旋转
第六步:插入结点 5
第七步:插入结点 4
第八步:LL旋转
第九步:插入结点 3
第十步:RL旋转
平衡二叉树的查找
在平衡二叉树上进行查找的过程与二叉排序树的相同。因此,在查找过程中,与给定值进行比较的关键字个数不超过树的深度。假设以 nh,表示深度为 h 的平衡树中含有的最少结点数。显然,nh有 n0=0,n1=1,n2=2, 并且有 nh=nh−1+nh−2+1。 可以证明,含有 n 个结点的平衡二叉树的最大深度为 O(log2n),因此平衡二叉树的平均查找长度为 O(log2n)。
边栏推荐
- 2022山东智慧养老展,适老穿戴设备展,养老展,山东老博会
- 航运船公司人工智能AI产品成熟化标准化规模应用,全球港航人工智能/集装箱人工智能领军者CIMC中集飞瞳,打造国际航运智能化标杆
- Mysql database backup script
- laravel中将session由文件保存改为数据库保存
- thinkphp3.2.3中设置路由,优化url
- TS as a general cache method
- Shader_ Animation sequence frame
- Excessive dependence on subsidies, difficult collection of key customers, and how strong is the potential to reach the dream of "the first share of domestic databases"?
- AE learning 02: timeline
- 持续创作,还得靠它!
猜你喜欢
Excessive dependence on subsidies, difficult collection of key customers, and how strong is the potential to reach the dream of "the first share of domestic databases"?
Numpy -- epidemic data analysis case
Vite path alias @ configuration
【花雕体验】15 尝试搭建Beetle ESP32 C3之Arduino开发环境
2022 the 4th China (Jinan) International Smart elderly care industry exhibition, Shandong old age Expo
2022第四届中国(济南)国际智慧养老产业展览会,山东老博会
TiDB For PostgreSQL和YugabyteDB在Sysbench上的性能对比
保证接口数据安全的10种方案
Three. JS introductory learning notes 18: how to export JSON files with Blender
Leetcode-231-2的幂
随机推荐
Leetcode-136-只出现一次的数(用异或来解答)
How to determine whether the checkbox in JS is selected
Bidding announcement: Panjin people's Hospital Panjin hospital database maintenance project
Numpy --- basic learning notes
Apache Doris just "graduated": why should we pay attention to this kind of SQL data warehouse?
航运船公司人工智能AI产品成熟化标准化规模应用,全球港航人工智能/集装箱人工智能领军者CIMC中集飞瞳,打造国际航运智能化标杆
Application example of infinite list [uigridview]
Aerospace Hongtu information won the bid for the database system research and development project of a unit in Urumqi
深度之眼(六)——矩阵的逆(附:logistic模型一些想法)
Shandong old age Expo, 2022 China smart elderly care exhibition, smart elderly care and aging technology exhibition
A link opens the applet code. After compilation, it is easy to understand
航天宏图信息中标乌鲁木齐某单位数据库系统研发项目
Three. JS introductory learning notes 04: external model import - no material obj model
Communication mode between application program and MATLAB
Notification uses full resolution
You Yuxi, coming!
SPI master RX time out interrupt
Unity3D_ Class fishing project, control the distance between collision walls to adapt to different models
谈谈 SAP iRPA Studio 创建的本地项目的云端部署问题
Sysom case analysis: where is the missing memory| Dragon lizard Technology