数据结构笔记
平衡二叉树(ALV树)
基本概念
-
平衡二叉树或者是空的二叉排序树,或者是满足下列性质的二叉排序树:
- 左子树和右子树的高度之差的绝对值小于等于1;
- 左子树和右子树也是平衡树。
-
节点的平衡因子 : 二叉树上节点左子树的深度减去该节点右子树的深度所得到的的值。
-
最小不平衡子树: 离插入点最近的,且平衡因子的绝对值大于1的节点为根的子树。
平衡二叉树的构造方法
LL型
调整方法:
用不平衡节点(1)的左孩子(2)代替其位置,原来的根(1)连同其右子树称为(2)的右子树,如果原来的左子树(2)有右子树,因为根节点成为其右子树,所以把(2)的右子树放到(1)的左子树的位置上。
RR型
调整方法:
用不平衡节点(1)的右孩子(2)代替其位置,原来的根(1)连同其左子树称为(2)的左子树,如果原来的右子树(2)有左子树,因为根节点成为其左子树,所以把(2)的左子树放到(1)的右子树的位置上。
LR型
调整方法:
先把下边(1)(2)节点进行调整,(1)(2)为RR型,所以用RR型的方法调整后,之后再用LL型的方法即可。
RL型
调整方法:
先把下边(1)(2)节点进行调整,(1)(2)为LL型,所以用LL型的方法调整后,之后再用RR型的方法即可。
折半查找在成功和失败下的平均查找长度
判定树如下:
查找成功时
A
S
L
=
∑
节
点
的
层
数
∗
该
层
节
点
的
个
数
n
n
为
节
点
总
个
数
ASL = \frac{\sum {节点的层数 * 该层节点的个数}}{n} \quad n为节点总个数
ASL=n∑节点的层数∗该层节点的个数n为节点总个数
查找失败时
A
S
L
=
∑
度
不
为
2
的
节
点
的
空
的
左
,
右
孩
子
节
点
数
∗
其
父
节
点
所
在
层
数
n
n
为
度
不
为
2
的
节
点
的
空
的
左
,
右
孩
子
节
点
总
个
数
ASL = \frac{\sum {度不为2 的节点的空的左,右孩子节点数 * 其父节点所在层数}}{n} \quad n为度不为2 的节点的空的左,右孩子节点总个数
ASL=n∑度不为2的节点的空的左,右孩子节点数∗其父节点所在层数n为度不为2的节点的空的左,右孩子节点总个数
AOE网中求关键路径
各顶点最早发生的时间
解决方法:
由一个顶点的前驱节点的最早发生时间分别加上 前驱节点到该节点的边权,其值得最大值就是该节点的最早发生时间。(就是说源点为0,之后对于后续的节点,找他的入度对应的点加上边权 (取最大值,可能有多个入度))
-
第一个节点前驱节点为空,设置为0
-
最大值意思是,如上图的V5有V3和V2都指向他,所以他的最早时间是e(V3) + 1 与 e(v2) + 1 这两个值中的最大值。
-
从第一个节点开始推导。
各顶点最晚发生的时间
解决的算法:
由它的每一个后继节点的最晚发生时间减去 其指向后继节点的 边权 ,其最小值 就为该节点的最晚发生时间。(就是汇点的值设置为其最早开始的,向前堆,对于每一个节点,找他的出边,出边连的节点的最晚时间加上边权(取最小值,可能有多条) .
边的最早发生时间和最晚发生时间
一条边有起始点i , 终止点j ,表示为<i,j>
- 边的最早发生时间: 为 <i,j> 中i 顶点对应的最早发生时间。
- 边的最晚发生时间:为 <i,j> 中j 顶点对应的最晚发生时间 减去 边权。
关键路径
将边的最早发生时间和最晚发生时间相等的边连起来。就得到关键路径。