AVL树:对于每一个节点都要满足其左右子树的高度差不得大于1的二叉树(平衡条件)。当经过插入操作或者删除操作后破坏了树的平衡性时,要经过调整恢复平衡性后才认为一次插入或者删除操作完成。这样的调整总是可以通过一次简单的修正完成,称之为旋转。
插入点a后,引起的不平衡情况有四种,下图分别给出了1~4的图形示意;:
1) 对a的左儿子的左子树进行了一次插入;
2) 对a的右儿子的右子树进行了一次插入;
3) 对a的左儿子的右子树进行了一次插入;
4) 对a的右儿子的左子树进行了一次插入;
图1
图2
图3
图4
总结:左单旋转:k1与k2交换位置,然后把k1的右子树放在k2左子树的位置;
右单旋转:k1与k2交换位置,然后把k1的左子树放在k2右子树的位置;
左双旋转:如图三,先对k1进行右单旋转,然后对k3进行左单旋转;
右双旋转:如图三,先对k1进行左单旋转,然后对k3进行右单旋转;(双旋转之所以叫做双旋转是因为经过了两次单旋转的原因吧)