一棵AVL树是其每个节点的左子树和右子树的高度最多差1的二叉查找树。
最少节点数
在高度为h的AVL树中,最少节点数S(h)=S(h-1)+S(h-2)+1,对于h=1,S(h)=1;h=1,S(h)=2。
插入之后重平衡
插入一个节点可能破坏AVL树的特性。此时需要对树进行简单的修正来重新恢复AVL树的平衡。
这些修正通常都是对失去平衡的节点进行旋转(rotation)。
如果把失去平衡的节点看作a,那么不平衡的情况就只能是下面四种情况:
- 对a的左儿子的左子树进行一次插入。
- 对a的左儿子的右子树进行一次插入。
- 对a的右儿子的左子树进行一次插入。
- 对a的右儿子的右子树进行一次插入。
1和4是关于a点的镜像对称,2和3也是关联a点的镜像对称。所以理论上是只有两种情况,也就是说,1和4这两种情况的处理只需要做反方向处理即可。
1和4这种情况只需要通过对树进行一次单旋转即可完成重新平衡。
2和3这种情况需要通过双旋转来处理。
