AVL树是带有平衡的二叉查找树!一颗AVL树的每一个结点的左子树和右子树的深度最多只有1的差距,这就保持了这颗二叉树的平衡!很大程度的提高了树的使用效率!
当我们对树进行一系列操作(插入、删除等)后,AVL树很可能就不能保持AVL的特性,所以在进行操作时,我们必须重新平衡这颗二叉树!
我们把必须重新平衡的结点叫做α(这样可以减少很多文字,又好理解),由于任意结点最多只有两个儿子,因此出现高度不平衡就需要α点的两个子结点高度差大于等于2。
如意看出,这种不平衡可能出现下面四种情况:
1、对α的左子树的左子树进行插入;
2、对α的左子树的右子树进行插入;
3、对α的右子树的右子树进行插入;
4、对α的右子树的左孩子进行插入。
1、3的情况是比较简单的,进行一次旋转就能完成平衡,而2、4的情况就比较复杂了,需要两次旋转!
我先定义一个AVL数的结点结构,只比查找树多一个属性:深度
#include <stdio.h>
#include <stdlib.h&g