【数据结构复习】是学习、复习常用数据结构系列文章。数据结构与算法密不可分,是程序实现功能的重要组成部分。优秀的数据结构可以提高算法的时间及空间效率。反之,将增加算法复杂度,甚至妨碍程序的正确执行。
一、引言
由于普通二叉查找树可能出现有极不平衡的情况,使时间复杂度最坏,于是有学者提出限制二叉查找树各子树的分布,使树形状平衡,保证较好的查找复杂度。其中最著名平衡树之一即为AVL树。
二、AVL树的定义
官方的定义可以参见其它网上资料。在这里我用大白话解释,话粗理不粗。有一对有兄弟A和B,他们的共同父亲是G。AVL树绝对不允许这种情况出现:
这对兄弟其中一人没有孩子,另外一人却当上了爷爷。
三、AVL树的八种违例情况
网上有很多总结,说四种情况。但是经常把同类型的几种情况列举出来,另外的几种却忽略不说。导致初学AVL树的朋友都糊里糊涂的。就列侯捷老师的《STL源码剖析》都是讲得不明不白。
本文干脆把八种情况都列举出来,一次性讲解。
还记得上文的定义吗?所谓AVL树违例,本来一个家庭好好的(合理AVL树),却因为这个家庭新添了一丁(插入一节点),使得兄弟A和B,一人没有孩子,另一个却当上了爷爷。
如果当上爷爷的是A,没孩子的是B,有如下四种情况,
(1)
(2)
(3)
(4)
一、引言
由于普通二叉查找树可能出现有极不平衡的情况,使时间复杂度最坏,于是有学者提出限制二叉查找树各子树的分布,使树形状平衡,保证较好的查找复杂度。其中最著名平衡树之一即为AVL树。
二、AVL树的定义
官方的定义可以参见其它网上资料。在这里我用大白话解释,话粗理不粗。有一对有兄弟A和B,他们的共同父亲是G。AVL树绝对不允许这种情况出现:
这对兄弟其中一人没有孩子,另外一人却当上了爷爷。
三、AVL树的八种违例情况
网上有很多总结,说四种情况。但是经常把同类型的几种情况列举出来,另外的几种却忽略不说。导致初学AVL树的朋友都糊里糊涂的。就列侯捷老师的《STL源码剖析》都是讲得不明不白。
本文干脆把八种情况都列举出来,一次性讲解。
还记得上文的定义吗?所谓AVL树违例,本来一个家庭好好的(合理AVL树),却因为这个家庭新添了一丁(插入一节点),使得兄弟A和B,一人没有孩子,另一个却当上了爷爷。
如果当上爷爷的是A,没孩子的是B,有如下四种情况,
(1)
(2)
(3)
(4)