我是靠谱客的博主 失眠月饼,最近开发中收集的这篇文章主要介绍数据结构与算法——AVL树简介,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

计算机科学中的树

二叉树
 二叉树  二叉查找树  笛卡尔树  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结点。(当然还是要旋转的,这只是一个特点)






最后

以上就是失眠月饼为你收集整理的数据结构与算法——AVL树简介的全部内容,希望文章能够帮你解决数据结构与算法——AVL树简介所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部