数据结构与算法——AVL树简介

来源:互联网 发布:怎么做淘宝客服怎么找 编辑:程序博客网 时间:2024/04/20 08:08

计算机科学中的树

二叉树 二叉树 二叉查找树 笛卡尔树 Top tree T树    自平衡二叉查找树 AA树 AVL树 红黑树 伸展树 树堆 节点大小平衡树   B树 B树 B+树 B*树 Bx树 UB树 2-3树 2-3-4树 (a,b)-树 Dancing tree H树   Trie 前缀树 后缀树 基数树  空间划分树 四叉树 八叉树 k-d树 vp-树 R树 R*树 R+树 X树 M树 线段树 希尔伯特R树 优先R树 非二叉树 Exponential tree Fusion tree 区间树 PQ tree Range tree SPQR tree Van Emde Boas tree  其他类型
 堆 散列树 Finger tree Metric tree Cover tree BK-tree Doubly-chained tree iDistance Link-cut tree 树状数组 


二叉树:

任何节点最多只允许有两个子节点。

二叉搜索树:

可以提供对数时间的元素插入和访问。任何节点的键值一定大于其左子树中的每一个节点的键值,并不小于其右子树中的每一个节点的键值。

平衡二叉搜索树:

平衡的意思是,没有任何一个节点过深(深度过大)。二叉搜索树可能会在多次插入或删除之后,变得不平衡。


AVL-tree、RB-tree和AA-tree均可实现出平衡二叉搜索树。

AVL-tree是一个"加上了额外平衡条件"的二叉搜索树,其平衡条件的建立是为了确保整棵树的深度为O(logN)。要求任何节点的左右子树高度相差最多1。

根节点到任一节点的路径长度,即所谓该节点的深度。根节点的深度永远为0.


平衡树和不平衡树的区别:



插入节点11之后,树变得不平衡了:



插入节点破坏了平衡条件的四种情况:



情况1,4对称,称为外侧插入,可以采用单旋转操作调整解决。

情况2,3对称,称为内侧插入,可以采用双旋转操作调整解决。






单旋转(旋转的情况为外侧插入):




双旋转(旋转的情况为内侧插入):



对于双旋转的情况,有一个特殊之处,比如上图,因为插入了15,引起了18的不平衡。15肯定是介于18和18的左子树之间的值。此时肯定要双旋转。
如果15的父节点不是18的子节点(上面的情况)双旋转其实就是将15的父节点代替18结点。(当然还是要旋转的,这只是一个特点)
如果15的父节点16是7的子节点(下面的情况)双旋转其实就是将15节点代替7结点。(当然还是要旋转的,这只是一个特点)






0 0
原创粉丝点击