1. 为什么平衡树?
在二叉搜索树(BST,Binary Search Tree)中提到,BST树可能会退化成一个链表(整棵树中只有左子树,或者只有右子树),这将大大影响二叉树的性能。
前苏联科学家G.M. Adelson-Velskii 和 E.M. Landis给出了答案。他们在1962年发表的一篇名为《An algorithm for the organization of information》的文章中提出了一种自平衡二叉查找树(self-balancing binary search tree)。这种二叉查找树在插入和删除操作中,可以通过一系列的旋转操作来保持平衡,从而保证了二叉查找树的查找效率。最终这种二叉查找树以他们的名字命名为“AVL-Tree”,它也被称为平衡二叉树(Balanced Binary Tree)。
2. 原理
在节点上设置一个平衡因子BF,代表左右子树的高度差,BF = { -1, 0, 1}。
3. 旋转
AVL的Insert/Delete操作可能会引起树的失衡,可以通过选择解决这个问题。
3.1 4种旋转
(1)LL
(2)RR
(3)LR
(4)RL
在下面的文章中有一个关于AVL选择的动画,大家不妨看看。