2006-d-三


//分别求出一个结点的左右孩子结点的高度做差即为平衡因子

int depth(BTNode *bt)
{
    int r,l;
    if(bt==NULL) return 0;
    else
    {
        l=depth(bt->lchild);
        r=depth(bt->rchild);
        return (l>r?l:r)+1;
    }
}

int balance(BTNode *T,int n)//n初始传入值为0
{
    int l,r;
    if(T!=NULL)
    {
        balance(T->lchild,n);
        balance(T->rchild,n);
        
        l=depth(T->lchild);
        r=depth(T->rchild);
        
        if(l+r>0) ++n;//记录非叶子结点个数
        printf("%d",l-r);//打印平衡因子
    }
    return n;
}