高度平衡的二叉树

合集下载

平衡二叉树10.3.2

平衡二叉树10.3.2

11
28
96 98
25
(1) LL型调整 型调整 p A 1 2
调整方法: 调整方法: 单向右旋平衡,即将 的左孩子 单向右旋平衡,即将A的左孩子 B 向右上旋转代替 成为根结点, 向右上旋转代替A成为根结点 成为根结点, 结点向右下旋转成为B的右 将A结点向右下旋转成为 的右 结点向右下旋转成为 子树的根结点, 子树的根结点,而B的原右子树 的原右子树 则作为A结点的左子树 结点的左子树. 则作为 结点的左子树. h d e B
1 38 -1 24 88
0 -1 -2
0
11
28 1
96
0
-1 0
25
0
98
1,平衡二叉树插入结点的调整方法
若向平衡二叉树中插入一个新结点后破坏了平衡二叉树的平衡性, 若向平衡二叉树中插入一个新结点后破坏了平衡二叉树的平衡性, 首先从根结点到该新插入结点的路径之逆向根结点方向找第一个失去平 衡的结点, 衡的结点,然后以该失衡结点和它相邻的刚查找过的两个结点构成调整 子树(最小不平衡子树 即调整子树是指以离插入结点最近,且平衡因子 最小不平衡子树), 子树 最小不平衡子树 ,即调整子树是指以离插入结点最近 且平衡因子 绝对值大于1的结点为根结点的子树 使之成为新的平衡子树. 的结点为根结点的子树,使之成为新的平衡子树 绝对值大于 的结点为根结点的子树 使之成为新的平衡子树. 38 24 88 -2
(2)RR型调整 型调整 p A -1 -2
调整方法: 调整方法: 单向左旋平衡:即将 的右孩子 的右孩子B向 单向左旋平衡:即将A的右孩子 向 左上旋转代替A成为根结点 成为根结点, 左上旋转代替 成为根结点,将A结 结 点向左下旋转成为B的左子树的根 点向左下旋转成为 的左子树的根 结点, 的原左子树则作为A结点 结点,而B的原左子树则作为 结点 的原左子树则作为 的右子树. 的右子树. B

详解平衡二叉树

详解平衡二叉树

一、平衡二叉树的概念平衡二叉树(Balanced binary tree)是由阿德尔森-维尔斯和兰迪斯(Adelson-Velskii and Landis)于1962年首先提出的,所以又称为AVL树。

定义:平衡二叉树或为空树,或为如下性质的二叉排序树:(1)左右子树深度之差的绝对值不超过1;(2)左右子树仍然为平衡二叉树.平衡因子BF=左子树深度-右子树深度.平衡二叉树每个结点的平衡因子只能是1,0,-1。

若其绝对值超过1,则该二叉排序树就是不平衡的。

如图所示为平衡树和非平衡树示意图:二、平衡二叉树算法思想若向平衡二叉树中插入一个新结点后破坏了平衡二叉树的平衡性。

首先要找出插入新结点后失去平衡的最小子树根结点的指针。

然后再调整这个子树中有关结点之间的链接关系,使之成为新的平衡子树。

当失去平衡的最小子树被调整为平衡子树后,原有其他所有不平衡子树无需调整,整个二叉排序树就又成为一棵平衡二叉树。

失去平衡的最小子树是指以离插入结点最近,且平衡因子绝对值大于1的结点作为根的子树。

假设用A表示失去平衡的最小子树的根结点,则调整该子树的操作可归纳为下列四种情况。

1)LL型平衡旋转法由于在A的左孩子B的左子树上插入结点F,使A的平衡因子由1增至2而失去平衡。

故需进行一次顺时针旋转操作。

即将A的左孩子B向右上旋转代替A作为根结点,A向右下旋转成为B的右子树的根结点。

而原来B的右子树则变成A的左子树。

(2)RR型平衡旋转法由于在A的右孩子C 的右子树上插入结点F,使A的平衡因子由-1减至-2而失去平衡。

故需进行一次逆时针旋转操作。

即将A的右孩子C向左上旋转代替A作为根结点,A向左下旋转成为C的左子树的根结点。

而原来C的左子树则变成A的右子树。

(3)LR型平衡旋转法由于在A的左孩子B的右子数上插入结点F,使A的平衡因子由1增至2而失去平衡。

故需进行两次旋转操作(先逆时针,后顺时针)。

即先将A结点的左孩子B的右子树的根结点D向左上旋转提升到B结点的位置,然后再把该D结点向右上旋转提升到A结点的位置。

平衡二叉树高度计算公式

平衡二叉树高度计算公式

平衡二叉树高度计算公式
平衡二叉树的高度可以使用以下公式计算:
H = log2(N+1) - 1
其中,N为平衡二叉树中节点的个数,H为平衡二叉树的高度。

公式的基本思想是,对于一棵高度为H的平衡二叉树,它的节点数N最小值是2^H - 1,最大值是2^(H+1) - 1。

因此,根据节点数N 可以推导得到平衡二叉树的高度H。

需要注意的是,此公式适用于普通的平衡二叉树,例如AVL树、红黑树等,但对于某些特殊的平衡二叉树,可能无法直接使用此公式计算高度。

例如,B树、B+树等平衡树的高度计算方法是不同的。

此外,需要注意在实际编写代码时,为了避免精度问题,可以将公式转化为H = ceil(log(N+1)/log(2)) - 1,其中ceil函数表示向上取整。

平衡二叉树

平衡二叉树
#define EH 0 //等高
#define RH -1 //右高
//平衡二叉树的类型
struct AVLNode
{
int data;
int bf; //bf结点的平衡因子,只能够取0,-1,1,为左子树的深度减去右子树的深度
struct AVLNode *lchild,*rchild; //左、右孩子指针
{
AVLNode *rc,*rd;
rc=T->rchild;
switch(rc->bf)
{
case RH:
T->bf=rc->bf=EH;
L_Rotate(T);
break;
case LH:
rd=rc->lchild;
switch(rd->bf)
{
case RH:
T->bf=LH;
rc->bf=EH;
};
2.右旋操作:
void R_Rotate(AVLNode *&p)//LL型算法
{
AVLNode *lc=p->lchild; // lc指向p的左子树根结点
p->lchild=lc->rchild; // lc的右子树挂接为p(之前跟节点)的左子树
lc->rchild=p;
p=lc; // p指向新的根结点
插入和删除:
插入删除是互为镜像的操作。我们可以采用前面对二叉排序树的删除操作来进行。然后,在删除掉结点后,再对平衡树进行平衡化处理。删除之所以删除操作需要的平衡化可能比插入时次数多,就是因为平衡化不会增加子树的高度,但是可能会减少子树的高度,在有有可能使树增高的插入操作中,一次平衡化能抵消掉增高;在有可能使树减低的删除操作中,平衡化可能会带来祖先节点的不平衡。AVL树体现了一种平衡的美感,两种旋转是互为镜像的,插入删除是互为镜像的操作,没理由会有那么大的差别。实际上,平衡化可以统一的这样来操作:

平衡二叉树特点

平衡二叉树特点

平衡二叉树特点
平衡二叉树是一种特殊的二叉查找树,具有以下特点:
1. 左右子树的高度差不超过1:平衡二叉树要求树中任意节点的左子树和右子树的高度差不超过1。

这样可以保证树的整体结构比较平衡。

2. 每个节点的左子树和右子树都是平衡二叉树:除了要求整棵树是平衡的,平衡二叉树还要求每个节点的左子树和右子树都是平衡二叉树。

这个特点可以通过递归来实现。

3. 平衡二叉树的高度大致为logN:由于平衡二叉树的高度差不超过1,因此在最坏情况下,一棵有N个节点的平衡二叉树的高度约为logN,这大大优于普通的二叉查找树。

4. 查找、插入和删除的时间复杂度都是O(logN):由于平衡二叉树的高度较低,对于含有N个节点的平衡二叉树,可以在O(logN)的时间复杂度内进行查找、插入和删除操作。

需要额外注意的是,平衡二叉树并不是绝对平衡的,只是相比于普通的二叉查找树,它更趋于平衡,通过旋转操作来维持平衡。

13个结点的平衡二叉树的最大高度

13个结点的平衡二叉树的最大高度

提前警告:本篇文章将深入探讨13个结点的平衡二叉树的最大高度这一主题,以让你更全面地了解和掌握相关知识。

目录1.什么是平衡二叉树2.13个结点的平衡二叉树构建3.平衡二叉树的最大高度究竟有多高4.与平衡二叉树相关的应用场景5.总结与展望1. 什么是平衡二叉树让我们来了解一下什么是平衡二叉树。

平衡二叉树是一种特殊的二叉树,它要求对于树中的每一个节点,它的左子树和右子树的高度差不能超过1。

这个定义保证了平衡二叉树的查询效率始终保持在一个较高水平。

2. 13个结点的平衡二叉树构建接下来,我们来看看怎样构建一个包含13个结点的平衡二叉树。

在构建平衡二叉树时,一般会选择中间结点作为根结点,然后将剩下的结点平分成左右两部分,分别作为左子树和右子树。

这样构建出来的平衡二叉树,可以确保树的高度尽可能地小,从而提高了查询效率。

3. 平衡二叉树的最大高度究竟有多高既然我们已经了解了如何构建平衡二叉树,接下来就是了解13个结点的平衡二叉树的最大高度究竟有多高了。

对于包含13个结点的平衡二叉树,它的最大高度应该是4。

这是由平衡二叉树的特性决定的,即每个结点的左右子树高度差不超过1。

通过数学计算可以得出,当结点数为13时,平衡二叉树的最大高度为4。

4. 与平衡二叉树相关的应用场景平衡二叉树作为一种高效的数据结构,被广泛地应用在各个领域。

其中,最常见的应用场景包括数据库索引、缓存淘汰算法、负载均衡等。

特别是在现代大数据处理和分布式系统中,平衡二叉树的应用更是不可或缺。

通过合理地构建平衡二叉树,可以大大提高系统的性能和稳定性。

5. 总结与展望我们在本文中深入探讨了13个结点的平衡二叉树的最大高度这一主题。

从平衡二叉树的定义、构建、最大高度以及应用场景等多个方面展开讨论,希望能够让你对这一主题有更深入的理解。

在未来的学习和工作中,希望你能够灵活运用平衡二叉树,发挥其高效查询的优势,为自己的发展增添动力。

个人观点:平衡二叉树作为一种重要的数据结构,在计算机领域有着广泛的应用前景。

数据结构:二叉树、平衡二叉树、红黑树详解

数据结构:二叉树、平衡二叉树、红黑树详解

数据结构:⼆叉树、平衡⼆叉树、红⿊树详解⼀、⼆叉树(binary tree)指每个节点最多含有两个⼦树的树结构。

时间复杂度为O(log N),在退化成链表的情况下时间复杂度为O(N)。

特点:1.所有节点最多拥有两个⼦节点;2.节点的左⼦树只包含⼩于当前根节点的数,节点的右⼦树只包含⼤于当前根节点的数。

缺点:只会以我们第⼀次添加的节点为根节点,如果后⾯添加的节点值都⼤于或⼩于根节点的值,在这种情况下会退化成链表。

⼆、平衡⼆叉树(Balanced Binary Tree)⼜称为AVL树,具有⼆叉树的全部特性,解决⼆叉树退化成链表情况的问题,每个节点的左⼦树和右⼦树的⾼度之差不会超过1,AVL树是严格的平衡⼆叉树,追求完全平衡,⽐较严格。

缺点:由于要求每个节点的左⼦树和右⼦树⾼度之差不超过1,这个要求⾮常严格,追求完全平衡,这就导致了在频繁插⼊和删除的场景中,可能就会导致AVL树失去平衡,AVL树就需要频繁的通过左旋右旋使其重新达到平衡,这时就会时得其性能⼤打折扣。

三、红⿊树和AVL树相⽐,红⿊树放弃追求完全平衡,⽽是追求⼤致平衡,保证每次插⼊节点最多只需要三次旋转就能达到平衡,维持平衡的耗时较少,实现起来也更为简单,它的旋转次数较少,对于频繁插⼊和删除操作的场景,相⽐AVL树,红⿊树更具优势。

特征:1.红⿊树是也是平衡⼆叉树实现的⼀种⽅式2.节点只能是⿊⾊或者红⾊,root根节点⼀定是⿊⾊3.新增时默认新增的节点是红⾊,不允许两个红⾊节点相连4.红⾊节点的两个⼦节点⼀定是⿊⾊红⿊树变换规则三种规则:1.改变节点颜⾊2.左旋转3.右旋转变⾊的情况:当前节点的⽗亲节点是红⾊,并且它的祖⽗节点的另外⼀个⼦节点(叔叔节点)也是红⾊:以当前节点为指针进⾏操作1.将⽗亲节点变为⿊⾊2.将叔叔节点变为⿊⾊3.将祖⽗节点变为红⾊4.再把指针定义到祖⽗节点进⾏旋转操作左旋转:当⽗亲节点为红⾊情况,叔叔节点为⿊⾊情况,且当前节点是右⼦树,左旋转以⽗节点作为左旋。

高度平衡的二叉树

高度平衡的二叉树
高度平衡的二叉搜索树
AVL( Addison-Velski and Landis )树 伸展树 红黑树

二叉搜索树性能分析

对于有 n 个关键码的集合,其关键码有 n! 种 不同排列,可构成不同二叉搜索树有 1 n C 2 n (棵)
n 1
{2, 1, 3} {1, 2, 3} {1, 3, 2} {2, 3, 1} {3, 1, 2} {3, 2, 1}
B
BRAຫໍສະໝຸດ AR中序序列:BL
B
BR
A
AR
注意:改组后
B
A
平衡度为 0
2)RR平衡旋转: 若在A的右子树的右子树上插入结点,使A的平衡
因子从-1增加至-2,需要进行一次逆时针旋转。
(以B为旋转轴)
A B A C
左单旋转 (RotateLeft )
+1
A
0
+2
A
+1
C C A
0
0
B h D h
(a)
C E
Double Rotations
Fig. 28-5 (a) Adding 70 to the tree in Fig. 28-2c destroys its balance; to restore the balance, perform both (b) a right rotation and (c) a left rotation.
h
B
E
h D h
(b)
E
h + 1
B
h
D h + h 1
(c)
如果在子树E中插入一个新结点,该子树高度增1导致 结点A的平衡因子变成+2,出现不平衡。 沿插入路径检查三个结点A、C和E。它们处于一条方 向为“\”的直线上,需要做左单旋转。 以结点C为旋转轴,让结点A反时针旋转。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
分别计算各个可能的扩充二叉搜索树的搜索性 能,判断哪些扩充二叉搜索树的平均搜索长度 最小。
to
p3=0.05 if
p2=0.1 do
q3=0.05 p1=0.5 do
p1=0.5
q2=0.05
if p2=0.1 p3=0.05 to q3= 0.05
q1=0.1 q0=0.15 q1=0.1 q2=0.05
图(e): ASLsucc = 1/3*1+1/3*3+1/3*2 = 6/3,
ASLunsucc = 1/4*1+1/4*3*2+1/4*2 = 9/4。
图(b)的情形所得的平均搜索长度最小。
(2) 不相等搜索概率的情形
设二叉搜索树中所有内、外部结点的搜索概率 互不相等。 p[1] = 0.5, p[2] = 0.1, p[3] = 0.05 q[0] = 0.15, q[1] = 0.1, q[2] = 0.05, q[3] = 0.05
1
1
2
3
3
2
31
31
2
32
21
同样 3 个数据{ 1, 2, 3 },输入顺序不同,建立 起来的二叉搜索树的形态也不同。这直接影响 到二叉搜索树的搜索性能。
如果输入序列选得不好,会建立起一棵单支树, 使得二叉搜索树的高度达到最大。
用树的搜索效率来评价这些二叉搜索树。
为此,在二叉搜索树中加入外结点,形成判定 树。外结点表示失败结点,内结点表示搜索树 中已有的数据。
do
q0= 0.15
p1=0.5 if p2=0.1
to
q1=0.1
p3=0.05
to
p3=0.05 do
q3=0.05
p1=0.5
q0=0.15
if p2=0.1
q2=0.05
(c)
q3=0.05 q1=0.1
(d)
q2=0.05
图(c): ASLsucc = 0.5*1+0.1*2+0.05*3 = 0.85, ASLunsucc = 0.15*1+0.1*2+0.05*3+0.05*3 = 0.75.
这样的判定树即为扩充的二叉搜索树。
举例说明。已知关键码集合 {a1, a2, a3} = {do, if, to},对应搜索概率p1, p2, p3, 在各搜索不成功间 隔内搜索概率分别为q0, q1, q2, q3。可能的二叉 搜索树如下所示。
to p3
p2if do p1
q3 q2
if p2 do p1
q0=0.15 (a)
(b)
图(a): ASLsucc = 0.5*3+0.1*2+0.05*1 = 1.75, ASLunsucc = 0.15*3+0.1*3+0.05*2+ 0.05*1 = 0.9。
图(b): ASLsucc = 0.5*2+0.1*1+0.05*2 = 1.2, ASLunsucc = (0.15+0.1+0.05+0.05)*2 = 0.7。
高度平衡的二叉搜索树
AVL( Addison-Velski and Landis )树 伸展树 红黑树
二叉搜索树性能分析
对于有 n 个关键码的集合,其关键码有 n! 种 不同排列,可构成不同二叉搜索树有
C 1 n
n 1 2n
(棵)
{2, 1, 3}
{1, 2, 3} {1, 3, 2} {2, 3, 1} {3, 1, 2} {3, 2, 1}
p1=0.5
to
q0=0.15
p3=0.05
if
p2=0.1
q3=0.05
0.1*3+0.05*3+0.05*2 = q1=0.1
q2=0.05
0.7;
(e)
由此可知,图(c)和图(e)的情形下树的平均搜索 长度达到最小,因此,图(c)和图(e)的情形是最 优二叉搜索树。
一般把平均搜索长度达到最小的扩充的 二叉搜索树称作最优二叉搜索树。
图(d) : ASLsucc = 0.5*2+0.1*3+0.05*1 = 1.35,
ASLunsucc = 0.15*2+0.1*3+0.05*3+0.05*1 = 0.8.
do
图(e) : ASLsucc = 0.5*1+ 0.1*3+0.05*2 = 0.9; ASLunsucc = 0.15*1+
在每两个外部结点间必存在一个内部结点。 一棵判定树上的搜索成功的平均搜索长度
ASLsucc可以定义为该树所有内部结点上的搜 索概率p[i]与搜索该结点时所需的关键码比较 次数c[i] (= l[i], 即结点所在层次) 乘积之和:
n
ASLsucc p[i]* l [i]. i 1
设各关键码的搜索概率相等:p[i] = 1/n
to p3
q0
q1
(a)
q0 q1 q2 q3
(b)
do
p1
if
q0
p2
to
q1
p3
q2
q3
(c)
判定树
to
p3
do
p1
q3
if
q0
p2
do p1 to
q1
q2
(d)
q0
p3
if

p2
q3
q1
q2
(e)
在判定树中 ○表示内部结点,包含了关键码集合中的 某一个关键码; □表示外部结点,代表各关键码间隔中的 不在关键码集合中的关键码。
ASLsucc
1 n
n i 1
l
[i ].
搜索不成功的平均搜索长度ASLunsucc为树中所 有外部结点上搜索概率q[j]与到达外部结点所需
关键码比较次数c'[j](= l'[j])乘积之和:
n
ASLunsucc q[ j]*(l '[ j] 1). j0
设外部结点搜索概率相等:q[j] = 1/(n+1):
图(b): ASLsucc = 1/3*2*2+1/3*1 = 5/3, ASLunsucc = 1/4*2*4 = 8/4。
图(c): ASLsucc = 1/3*1+1/3*2+1/3*3 = 6/3, ASLunsucc = 1/4*1+1/4*2+1/4*3*2 = 9/4。
图(d): ASLsucc = 1/3*2+1/3*3+1/3*1 = 6/3, ASLunsucc = 1/4*2+1/4*3*2+1/4*1 = 9/4。
ASLunsucc
1 n1
n
(l'[ j] 1).
j0
(1) 相等搜索概率的情形
设树中所有内、外部结点的搜索概率都相等:
p[i] = 1/3, 1≤i≤3, q[j] = 1/4, 0≤ j≤3
图(a): ASLsucc = 1/3*3+1/3*2+1/3*1 = 6/3, ASLunsucc = 1/4*3*2+1/4*2+1/4*1 = 9/4。
相关文档
最新文档