判断二叉树是否为平衡二叉树



struct tree {
    void * data;
    struct tree *left;
    struct tree *right;
};

int tree_high(struct tree *t) {
    int r = 0;
    int l = 0;
    if (t == NULL) {
        return 0;
    }
    if (t->left) {
        l = tree_high(t->left) + 1;
    }
    if (t->right) {
        r  = tree_high(t->right) + 1;
    }

    return r > l ? r : l; 
}


 int _is_balance(struct tree * t, int *balance) {
    int r = 0;
    int l = 0;
    if (t == NULL) {
        return 0;
    }
    if (t->left) {
        l = _is_balance(t->left, balance) + 1;
        if (*balance == 0) return 0;
    }
    if (t->right) {
        r  = _is_balance(t->right, balance) + 1;
        if (*balance == 0)  return 0; 
    }
    int c = l > r ? l - r : r - l;
    if (c >= 2) {
        *balance = 0;
    }
    return l > r ? l : r;
 }
 
/**
 * return 1 is balance, 0 not balance
*/
 int is_balance (struct tree *t) {
    int balance = 1;
    _is_balance(t, &balance);
    return balance;
 }





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值