判断给定二叉树是否是平衡二叉树

设二叉树的平衡标记balance,以标记返回二叉树bt是否是平衡二叉树。是返回1否则为0.h为bt的高度。

        采用后序遍历递归算法:

        1)bt为空,高度0,balance=1;

        2)仅有根结点,高度1,balance=1;

        3)对bt左右子树执行递归,返回 其高度及平衡标记。bt高度为最高子树高度加1。左右子树高度差大于1,balance=0;小于1,且左右均平衡时,balance=1,否则为0;

void Judge_AVL(BiTree bt,int &balance,int &h){
    int bl=0,br=0,hl=0,hr=0;
    if(bt==NULL){
        h=0;
        balance=1;
    }
    else if(bt->lchild==NULL&&bt->rchild==NULL){
        h=1;
        balance=1;
    }
    else{
        Judge_AVL(b->lchild,bl,hl);//递归判断左子树
        Judge_AVL(b->rchild,br,hr);
        h=(hl>hr?hl:hr)+1;
        if(abs(hl-hr)<2)//子树高度差小于2,看左右子树是否都平衡
            balance=bl&&br;//左右都平衡时,二叉树平衡
        else
            balance=0;
    }
    
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值