AVL(即平衡二叉树)树是带有平衡条件的二叉查找树(二叉查找树即左孩子小于根节点,右孩子大于根节点的二叉树)。一颗AVL树是其每个节点的左子树和右子树的高度最多差 1 的二叉查找树(空树的高度定为-1),只有一个节点的树高度为0。在高度为h的AVL树中,最少节点数S(h)=S(h-1)+S(h-2)+1,对于h=0,S(h)=1;h=1,S(h)=2。
当进行插入操作时,我们需要更新通向根节点路径上那些节点的所有平衡信息,而插入操作隐含着困难的原因在于,插入一个节点可能破坏AVL书的特性。如果发生这种情况,那么就要考虑这一步插入完成之前恢复平衡的性质,这步操作称为旋转。
我们把必须重新平衡的节点叫做 α ,由于任意节点最多有两个儿子,因此出现高度不平衡就需要 α 点的两课子树的高度差2,这种不平衡可能出现在下面四种情况中:
1. 对 α 的左儿子的左子树进行一次插入。
2. 对 α 的左儿子的右子树进行一次插入。
3.对 α 的右儿子的左子树进行一次插入。
4.对 α 的右儿子的右子树进行一次 插入。
恢复有两种旋转:
单旋转:对于1、4情况使用单旋转。