void JudgeAVL(BiTree b,int *balance,int *h) //balance返回是否平衡;h返回每个子树的高度
{
int hl=0,hr=0; //保存左子树和右子树的高度值
int b1=0.b2=;//保存左子树和右子树的是否为AVL,都是本节点才能为AVL
if(b==NULL) //判定空树是否平衡+高度
{
h = 0;
balance=1;
}
else if(b->lchild==NULL && b->rchild==NULL)//判定只有根节点树是否平衡+高度
{
h=1;
balance=1;
}
else
{
JudgeAVL(b->lchild,&b1,&hl);
JudgeAVL(b->rchild,&b2,&hr);
//本层结点的高度为左子树和右子树高度最大值+1
h = (hl>hr ? hl:hr)+1;
if(abs(hl=hr) < 2)
{
if(b1&&b2)
{
balance = 1;
}
else
{
balance=0;
}
}
else
{
balance=0;
}
}
}