AVL树是一种二叉平衡查找树,被广泛使用。
AVL树的性质是:任意节点的左右子树高度差不超过1。
在进行节点插入与删除时,AVL树首先进行与二叉平衡查找树相同的插入、删除过程,然后自底向上进行回溯,回溯的过程中重新计算节点的左右子树高度差,高度差超过2的节点进行平衡。
AVL树的平衡操作通过旋转来完成。平衡时只需要考虑4种情况,既LL、RR、LR、RL,具体情形参见《数据结构与算法 - 面向对象的C++设计模式》。另外TAOCP一书对AVL树有更详尽的讨论。
下面给出AVL树的一个示例代码,演示AVL树如何插入、删除。代码仅供参考,细节考虑不周处请忽略。
avltree.cpp
main函数可以按照如下方式书写:
AVL树搜索、插入、删除的时间复杂度为O(lgn)。