判断一棵树是不是AVL树

这里的AVL树指的是,在BST树的基础上,满足任意结点的平衡因子绝对值小于2


判断主程序:

bool JudgeAvl(TreeNode *root, int min, int max, int &deepth){
    if(root == NULL) return true;
    if(root->val < min || root->val > max) return false; //用于判断是不是BST
    int left_deepth = 0, right_deepth = 0;
    if(JudgeAvl(root->left, min, root->val, left_deepth) && JudgeAvl(root->right, root->val, max, right_deepth)){
        if(abs(left_deepth - right_deepth) >= 2)   //判断平衡因子是否小于2
            return false;
        deepth = (left_deepth > right_deepth) ? (left_deepth + 1):(right_deepth + 1);  //得到当前结点的深度,一定要传引用
        return true;
    }   
    return false;
}

调用主接口:

int main(void)
{
    TreeNode *root = NULL;
    PreoderBuildTree(root);
    int tree_deepth = 0;
    if(JudgeAvl(root, INT_MIN, INT_MAX, tree_deepth))
        std::cout << "TRUE" << std::endl;
    else
        std::cout << "FALSE" << std::endl;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值