一,定义
AVL树:自平衡二叉查找树
1.AVL树概念:
AVL树只是实现平衡二叉树的一种方法,它还有很多的其他实现方法如红黑树、替罪羊树、Treap、伸展树等。
AVL树首先是一棵二叉搜索树
一棵AVL树或者是空树,或者是具有以下性质的二叉搜索树:
- 它的左右子树都是AVL树
- 左子树和右子树高度之差(简称平衡因子)的绝对值不超过1
2.AVL树效率:
一棵AVL树有N个节点,其高度可以保持在lgN,插入/删除/查找的时间复杂度也是O(lgN)。
二,平衡二叉树的恢复平衡
是通过旋转
来修复一棵失衡的二叉树,假设结点X是失衡点,它必须重新恢复平衡,由于任意结点的孩子结点最多有两个,而且导致失衡的必要条件是X结点的两棵子树高度差为2(大于1),因此一般只有以下4种情况可能导致X点失去平衡:
① 在结点X的左孩子结点的左子树中插入元素
② 在结点X的左孩子结点的右子树中插入元素
③ 在结点X的右孩子结点的左子树中插入元素
④ 在结点X的右孩子结点的右子树中插入元素
以上4种情况,其中第①情况和第④情况是对称的,可以通过单旋转来解决,而第②种情况和第③情况是对称的,需要双旋转来解决。