编辑代码

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;
        } 
    }
}