数据结构AVL树

等价二分查找树的结构
定义: 中序白能力的相同的任意两个的二叉树的,想出相互等价的,。
引理7:
有N个节点的组成的任何一个二分茶轴的树的T的二分不超过的log2n 的二分查找树等价。
证明:
对T做中序遍历设对应的比哪里的O(T)={t1,t2,,,tn};
考虑的有N个接待你的组成的完全二叉树的S积极遍历的序列G(s)={s1,s1,,,,sn};
只要按照的sj.key=t.key的愿测将T的各个节点中分别分支给S中的对应的节点。则必须S
必须T等价。此时,根据的定理4: S的高度logn.
 7.2.3等价变换。
定理的交换:

7.2.3 等价交换的
引入带你管告诉我们:每一刻的二分掺渣树斗鱼摸一个平衡二叉树的相互等价。
zig 旋转
如图:

if( v.isLeft){
/返回词典中的所有条目个一个迭代器
public Iteratior entrites(){
List list =new List_DLNode();
concatnate(list,(BSTreeNode) root);
return list.elements();
}

/*******************辅助的方法***********************/

}

7.1.8二分查找书的平均性能;
根据 引理 3.引理4.引力7.5 分类,对二分叉树的茶壶是的,插入和删除的操作,在最坏的情况下都是需要
O(n) 的时间才成完成。 就这一点,而言,第六掌实现的磁带你结构没有区别。那么,就君君复杂度而言。
二分叉树的性能有啊经然后和,是否还是这个水平。
实际 上,这里的“平均”依次的定义并不严格,。下面,我们将对随机的统计的口径,给出二分查找树的平均性能。
随机的生成:
不妨考虑关键码沪指的n个条目,{e1,e2,...en} ,对于这些条目的人一个全配列的o(e1,e2,e3) ,若从孔数开始。依次调用。
insert 算法将查插入的算法,都可以到的这个n个条目。都可以的得到N个条目的一颗二分察州署的T(O)。

定义七:与碎金的相对应的而分叉上奏的T(V),乘坐G的生成二分查找树。

【数据结构AVL树】定义: 与碎金的排列G对应的二分阐述的排列i,乘坐生成吃的二分叉树的。

7.2.4AVL 树
平衡因子:
在二分查住的中,恩于i个界定啊的V平和的因子,定义为,左右差的告诉差,记错
balFac(v) =height(lc(v)-height)
这里需要再次枪挑,空树的告诉的定义为-1.
AVL 树:
根据平衡因子,我们可以一种特殊的二分檫檫树的:
定义 : 在 而分叉书中,若松与的平和内因的句对之的不产故宫,则成为 T为一个AVL树/。

AVL 结论VL的树的人一个字数必然是AVL树。
平衡结果, AVL的人一个字数也必是AVL树。
证明:
数学归纳法证明:
考察的人一个AVL的树T。
7.2.2等价二分查找树
定义七: 中学遍历序列相同的任意两颗二叉树,乘坐相互等价的。
比如在在图七中: T与S就是一对等价的二叉树。

等价交换:
zig旋转:
zag选装:
堆成的,嘉定节点v 是节点 P的有孩子,z和Y分别是v 的右孩子树。X为p的左孩子树。
所谓的围绕节点的P的zag 旋转操作,节奏zag(p) ,就是将pe 作为的 v 的左孩子,将z作为的v 的右孩子。
将Y和X分别为P的右孩子和左子树。

效率:
 无论是zig(p)和zag(p),都设计的常熟基本操作,于是便有如下结论:
 引理: zig 和 zag 旋转操作都可以在长苏时间内完成。

效果:
根据 上述的两类情况的处理方法,可以得出一下的结论:
观察结论:
在 AVL树中插入节点X后,如g(x) 是失衡的最低节点,则经过上述的单选或双选调整之后,不仅
能使在巨虎重新品格很同时高度也复原,而且整棵树的液晶重获平衡。

因此,可进一步得出一下结论:
引理: 在AVL 中插入一个接待你后,至多只需压迫经过两次选装可是之回复平很。
双选:

失衡的传播:
与节点插入机器不同的是,在删除的之后u,经过单选或双选调正之后可以是的局部回复平衡。
但全局依然可能存在失衡的现象。请注意在失衡传播。

幸运的是: 就一下事实的意义而言,这种传播时单调的。

观察结论: 在删除AVL节点后,经过上述的单选或双选调正,最深的是和的系欸的那的深度必然减少。
也就说:

即使胡出现新的失衡节点,也只能出现在高处,因此我们,只需要急促宁乡而傻瓜,找到
新的最真的是很Jedi那。

效率:
上述调整过程中在AVL撒谎才能胡一个节点后,之多 jO(logn)次选装操偶组即可使得回府平衡。




















    推荐阅读