高度平衡的二叉树

合集下载

二叉树知识点总结

二叉树知识点总结

二叉树知识点总结1. 二叉树的性质1.1 二叉树的性质一:二叉树的深度二叉树的深度是指从根节点到叶子节点的最长路径长度。

对于一个空树而言,它的深度为0;对于只有一个根节点的树而言,它的深度为1。

根据定义可知,深度为k的二叉树中,叶子节点的深度值为k。

由此可知,二叉树的深度为所有叶子节点深度的最大值。

1.2 二叉树的性质二:二叉树的高度二叉树的高度是指从根节点到叶子节点的最短路径长度。

对于一个空树而言,它的高度为0;对于只有一个根节点的树而言,它的高度为1。

由此可知,二叉树的高度总是比深度大一。

1.3 二叉树的性质三:二叉树的节点数量对于一个深度为k的二叉树而言,它最多包含2^k - 1个节点。

而对于一个拥有n个节点的二叉树而言,它的深度最多为log2(n+1)。

1.4 二叉树的性质四:满二叉树满二叉树是一种特殊类型的二叉树,它的每个节点要么是叶子节点,要么拥有两个子节点。

满二叉树的性质是:对于深度为k的满二叉树而言,它的节点数量一定是2^k - 1。

1.5 二叉树的性质五:完全二叉树完全二叉树是一种特殊类型的二叉树,它的所有叶子节点都集中在树的最低两层,并且最后一层的叶子节点从左到右依次排列。

对于一个深度为k的完全二叉树而言,它的节点数量一定在2^(k-1)和2^k之间。

2. 二叉树的遍历二叉树的遍历是指按照一定的顺序访问二叉树的所有节点。

二叉树的遍历主要包括前序遍历、中序遍历和后序遍历三种。

2.1 前序遍历(Pre-order traversal)前序遍历的顺序是:根节点 -> 左子树 -> 右子树。

对于一个二叉树而言,前序遍历的结果就是按照“根-左-右”的顺序访问所有节点。

2.2 中序遍历(In-order traversal)中序遍历的顺序是:左子树 -> 根节点 -> 右子树。

对于一个二叉树而言,中序遍历的结果就是按照“左-根-右”的顺序访问所有节点。

2.3 后序遍历(Post-order traversal)后序遍历的顺序是:左子树 -> 右子树 -> 根节点。

AVL树自平衡的二叉搜索树

AVL树自平衡的二叉搜索树

AVL树自平衡的二叉搜索树AVL树是一种自平衡的二叉搜索树,它是根据其发明者 G.M. Adelson-Velsky 和 Evgenii Landis 的姓氏首字母而得名。

AVL树解决了传统二叉搜索树由于插入或删除操作导致树结构不平衡而引发的性能问题。

1. 什么是二叉搜索树?二叉搜索树,又称二叉排序树或二叉查找树,是一种特殊的二叉树结构。

在二叉搜索树中,每个节点都包含一个键值,并且节点的左子树中的键值小于节点的键值,右子树中的键值大于节点的键值。

2. 为什么需要自平衡?传统的二叉搜索树在执行插入或删除操作时,可能会导致树结构不平衡,使得树的高度远大于理想情况下的最小高度。

当树的高度增加后,查找、插入、删除等操作的时间复杂度也会增加,进而影响整体性能。

3. AVL树的自平衡特性AVL树通过保持树的平衡性来提高性能。

对于每一个节点,AVL 树通过计算其左右子树的高度差(平衡因子)来判断是否需要进行旋转操作来保持树的平衡。

当平衡因子超过一定阈值时,进行相应的旋转操作来维持平衡。

4. AVL树的旋转操作AVL树的旋转操作包括左旋和右旋。

左旋操作将当前节点的右子树变为新的根节点,而右旋操作则恰恰相反。

通过旋转操作,AVL树可以在保持二叉搜索树性质的同时,实现树的自平衡。

5. AVL树的插入操作在进行插入操作时,AVL树首先按照二叉搜索树的规则找到插入位置,并插入新的节点。

然后,从插入节点开始沿着路径向上逐层检查平衡因子,若遇到不平衡的节点,执行相应的旋转操作来恢复树的平衡。

6. AVL树的删除操作在进行删除操作时,AVL树首先按照二叉搜索树的规则找到待删除的节点,并执行删除操作。

然后,从删除节点的父节点开始沿着路径向上逐层检查平衡因子,若遇到不平衡的节点,执行相应的旋转操作来恢复树的平衡。

7. AVL树的平衡性保证AVL树的自平衡操作保证了树的高度始终保持在理想情况下的最小高度的常数倍。

通过对平衡因子的检查并执行旋转操作,AVL树能够有效地保持树的平衡性,使得查找、插入、删除等操作能够在较快的时间内完成。

平衡二叉树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

平衡二叉树 平衡因子

平衡二叉树 平衡因子

平衡二叉树平衡因子
平衡二叉树,又称AVL树,是一种自平衡二叉搜索树。

它具有以下特点:任意节点的左右子树高度差不超过1。

为了实现这个特点,需要在插入和删除节点时进行相关操作,以保持树的平衡。

平衡因子是平衡二叉树中每个节点的一个属性,它表示该节点的左右子树高度差。

平衡因子可以为-1、0和1。

如果平衡因子为-1,表示该节点的左子树高度比右子树高1;如果平衡因子为0,表示该节点的左右子树高度相等;如果平衡因子为1,表示该节点的右子树高度比左子树高1。

在平衡二叉树中,任意节点的平衡因子必须在-1到1之间,否则该节点就不符合平衡条件,需要进行相应的平衡操作。

平衡因子的计算方法是该节点的右子树高度减去左子树高度。

例如,在下面这棵平衡二叉树中,节点7的平衡因子为1,节点6的平衡因子为-1。

```
5
/
3 7
/ /
1 4 6 8
```
在插入和删除节点时,需要根据节点的平衡因子来判断树是否需要进行平衡操作。

如果某个节点的平衡因子不符合要求,需要进行旋
转操作来调整节点的位置,以保持树的平衡。

具体的旋转操作包括左旋、右旋、左右旋和右左旋,可以根据节点的平衡因子和子节点的平衡因子来确定需要进行的操作。

维护平衡二叉树需要付出一定的时间和空间代价,但它的优点是可以保证树的查找、插入和删除操作的时间复杂度都是O(log n),比普通的二叉搜索树更加高效。

因此,在需要频繁进行这些操作的场景下,平衡二叉树是一种非常有用的数据结构。

详解平衡二叉树

详解平衡二叉树

一、平衡二叉树的概念平衡二叉树(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结点的位置。

平衡二叉树 平衡因子

平衡二叉树 平衡因子

平衡二叉树平衡因子
平衡二叉树,也称为 AVL 树,是一种自平衡二叉搜索树。

它是通过在每个节点处存储平衡因子来实现自平衡的。

平衡因子是指左子树高度与右子树高度之差。

在 AVL 树中,每个节点的平衡因子必须在{-1, 0, 1}这个范围内。

如果一个节点的平衡因子超出了这个范围,它就不再是 AVL 树,需要通过旋转操作来重新平衡。

对于一个节点的左右子树高度差为 k,其平衡因子即为 k。

当左子树高度大于右子树高度时,其平衡因子为正数;当右子树高度大于左子树高度时,其平衡因子为负数。

平衡二叉树的平衡因子是实现它自平衡的关键。

它能够使 AVL 树在插入和删除节点时,自动地调整树的结构,使其保持平衡。

通过保持 AVL 树的平衡,可以保证树的搜索、插入和删除操作的时间复杂度都是 O(log n)。

总之,平衡二叉树通过存储平衡因子来实现自平衡,使其在插入和删除节点时自动调整树的结构,保持平衡。

平衡因子是 AVL 树实现自平衡的关键,通过它可以保证搜索、插入和删除操作的时间复杂度都是 O(log n)。

- 1 -。

平衡二叉树

平衡二叉树
#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树体现了一种平衡的美感,两种旋转是互为镜像的,插入删除是互为镜像的操作,没理由会有那么大的差别。实际上,平衡化可以统一的这样来操作:

平衡二叉树实现代码

平衡二叉树实现代码

平衡二叉树实现代码平衡二叉树(Balanced Binary Tree),也叫 AVL 树,是一种特殊的二叉树,它的每个节点的左子树和右子树的高度差不超过1、当插入或删除一个节点后,如果导致树的不平衡,就通过旋转操作来恢复平衡。

下面是平衡二叉树的实现代码:```python#定义平衡二叉树的节点类class AVLNode:def __init__(self, key):self.key = keyself.left = Noneself.right = Noneself.height = 1#定义平衡二叉树类class AVLTree:def __init__(self):self.root = None#获取节点的高度def get_height(self, node):if node is None:return 0return node.height#计算平衡因子def get_balance(self, node):if node is None:return 0return self.get_height(node.left) -self.get_height(node.right)#左旋操作def left_rotate(self, z):y = z.rightT2 = y.lefty.left = zz.right = T2z.height = 1 + max(self.get_height(z.left), self.get_height(z.right))y.height = 1 + max(self.get_height(y.left), self.get_height(y.right))return y#右旋操作def right_rotate(self, z):y = z.leftT3 = y.righty.right = zz.left = T3z.height = 1 + max(self.get_height(z.left), self.get_height(z.right))y.height = 1 + max(self.get_height(y.left), self.get_height(y.right))return y#插入节点def insert(self, key):def insert_node(node, key):if node is None:return AVLNode(key)elif key < node.key:node.left = insert_node(node.left, key)else:node.right = insert_node(node.right, key)node.height = 1 + max(self.get_height(node.left), self.get_height(node.right))balance = self.get_balance(node)#如果节点不平衡,进行旋转操作来恢复平衡if balance > 1:if key < node.left.key:return self.right_rotate(node)else:node.left = self.left_rotate(node.left)return self.right_rotate(node)if balance < -1:if key > node.right.key:return self.left_rotate(node)else:node.right = self.right_rotate(node.right)return self.left_rotate(node)return nodeself.root = insert_node(self.root, key)#删除节点def delete(self, key):def delete_node(node, key):if node is None:return nodeelif key < node.key:node.left = delete_node(node.left, key) elif key > node.key:node.right = delete_node(node.right, key) else:if node.left is None:temp = node.rightnode = Nonereturn tempelif node.right is None:temp = node.leftnode = Nonereturn temptemp = self.get_min_value_node(node.right)node.key = temp.keynode.right = delete_node(node.right, temp.key)if node is None:return nodenode.height = 1 + max(self.get_height(node.left), self.get_height(node.right))balance = self.get_balance(node)#如果节点不平衡,进行旋转操作来恢复平衡if balance > 1:if self.get_balance(node.left) >= 0:return self.right_rotate(node)else:node.left = self.left_rotate(node.left)return self.right_rotate(node)if balance < -1:if self.get_balance(node.right) <= 0:return self.left_rotate(node)else:node.right = self.right_rotate(node.right)return self.left_rotate(node)return nodeself.root = delete_node(self.root, key) #获取以一些节点为根的子树中的最小值节点def get_min_value_node(self, node):if node is None or node.left is None: return nodereturn self.get_min_value_node(node.left) #中序遍历树def inorder_traversal(self):def inorder(node):if node is None:returninorder(node.left)print(node.key, end=" ")inorder(node.right)inorder(self.root)#测试代码if __name__ == '__main__':tree = AVLTreenodes = [50, 30, 70, 20, 40, 60, 80, 25, 10, 55]for node in nodes:tree.insert(node)print("平衡二叉树中序遍历结果:")tree.inorder_traversalprint("\n删除节点 40 后的平衡二叉树中序遍历结果:")tree.delete(40)tree.inorder_traversal```以上就是平衡二叉树的实现代码,代码中包含了平衡二叉树节点类的定义,以及插入节点、删除节点、左旋和右旋操作等方法的实现。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
高度平衡的二叉搜索树
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反时针旋转。
3)LR平衡旋转:
若在A的左子树的右子树上插入结点,使A的平
由此可知,图(c)和图(e)的情形下树的平均搜索 长度达到最小,因此,图(c)和图(e)的情形是最 优二叉搜索树。

一般把平均搜索长度达到最小的扩充的 二叉搜索树称作最优二叉搜索树。 等概率条件下,最优二叉搜索树的最短 内部路径长度与最短外部路径长度, 课本 n 383页: I log2 i .
i 1

E
2n 1
i n 1
log i 1.
2
平衡二叉树
☞ 一、什么是平衡二叉树 二、失衡二叉排序树的分析与调 整
平衡二叉树又称为AVL树。 一棵平衡二叉树或者是空树,或者是具有下列性质 的二叉排序树: ① 左子树与右子树的高度之差的绝对值小于等于1; ② 左子树和右子树也是平衡二叉排序树。
例:下图对平衡二叉树和失去平衡的二叉排序树分别 标注了平衡因子。
-1 40
-1 40
-1 53 -1 24
-1 24
0 28 0 45
-2 53
0 28 0 60 1 70
1 70
0 60
平衡二叉树
一、什么是平衡二叉树 ☞ 二、失衡二叉排序树的分析与调 整
如果在一棵AVL树中插入一个新结点,就有可能造
BL
h-2
C
AR
h-1
h-1
CL
CR
h-2
改组后: 高度为 h + 1 中序序列: BL
改组前:
高度为 h + 1 中序序列: BL
B
CL
C
CR
A
AR
B
CL
C
CR
A
AR
注意:改组后
B
C
A
平衡度为 0,0,-1
Double Rotations
Fig. 28-7 (a) The AVL tree in Fig. 28-5 after additions that maintain its balance; (b) after an addition that destroys the balance … continued →
ASLsucc p[i ] * l [i ].
i 1
n

设各关键码的搜索概率相等:p[i] = 1/n
ASLsucc 1 n l [i ]. n i 1

搜索不成功的平均搜索长度ASLunsucc为树中所 有外部结点上搜索概率q[j]与到达外部结点所 需关键码比较次数c'[j](= l'[j])乘积之和:
to p3=0.05 if p2=0.1 do p1=0.5 q0=0.15 q3=0.05 if p1=0.5 do
p2=0.1
p3=0.05 to q3= q2=0.05 0.05 q1=0.1 q0=0.15 q1=0.1 q2=0.05
(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。
ASLunsucc q[ j ] * (l '[ j ] 1).
j 0 n

设外部结点搜索概率相等:q[j] = 1/(n+1): 1 n ASLunsucc (l' [ j] 1). n 1 j 0
(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。 图(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。
衡因子从1增加至2,需要先进行逆时针旋转,再顺 时针旋转。 (以插入的结点C为旋转轴)
A B C B C A
2、LR 情况:(LR:表示新插入结点在危机结点的 左子树的右子树上) 情况A:
+2 -1 0 +1
危机结点
0
A
0 0
C
-1
B
+1 h-1
AR
h-1
LR 改组
h-1
B
BL
h-1
A
CL CR
h-2
A B C A
右单旋转 (RotateRight )
A
-1
A C B -1
-2
0
B
0
B D
h
0
C
E h h
(a)
D
h + 1
E h h
(b)
D h E + 1 h (c)
A
C
h
在左子树D上插入新结点使其高度增1,导致结点A的 平衡因子增到 -2,造成了不平衡。 为使树恢复平衡,从A沿插入路径连续取3个结点A、B 和D,它们处于一条方向为“/”的直线上,需要做右 单旋转。 以结点B为旋转轴,将结点A顺时针旋转。
图(e) : ASLsucc = 0.5*1+ q0=0.15 if 0.1*3+0.05*2 = 0.9; q3=0.05 p2=0.1 ASLunsucc = 0.15*1+ 0.1*3+0.05*3+0.05*2 = q1=0.1 q2=0.05 0.7; (e)

do p1=0.5 to p3=0.05
Double Rotations
Fig. 28-7 (ctd.) (c) after a left rotation; (d) after a right rotation.
4)RL平衡旋转: 若在A的右子树的左子树上插入结点,使A的平衡因子
从-1增加至-2,需要先进行顺时针旋转,再逆时针旋 转。 (以插入的结点C为旋转轴)
do p1=0.5 q0= if p2=0.1 0.15 to q1=0.1 p3=0.05
to p3=0.05 do p1=0.5 q0=0.15 q1=0.1
q3=0.05 if p2=0.1
q2=0.05
q3=0.05
(c)
(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. 图(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.
A B C
A C
B B
这种调整规则可以保证二叉排序树的次序不变
综上所述, 在一个平衡二叉排序树上插入一个新 结点S时,主要包括以下三步: (1)查找应插位臵,同时记录离插入位臵最近的可能
相关文档
最新文档