LeetCode-98-验证二叉搜索树-C语言

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */

void find_max(struct TreeNode *root, int *val){
    if(!root){
        return;
    }
    
    if(root->val > *val){
        *val = root->val;
    }
    
    find_max(root->left, val);
    find_max(root->right, val);
}

void find_min(struct TreeNode *root, int *val){
    if(!root)
        return;
    
    if(root->val < *val)
        *val = root->val;
        
    find_min(root->left, val);
    find_min(root->right, val);
}

bool isValidBST(struct TreeNode* root){
    int min = INT_MAX;
    int max = INT_MIN;
    
    if(!root || (!root->left && !root->right)){
        return true;
    }
    find_max(root->left, &max);
    find_min(root->right, &min);
    
    printf("max = %d, min = %d \n", max, min);
    
    bool ret = true;
    
   
    if(root->right){
        ret &= isValidBST(root->right) && root->val < min;
        if(!root->left)
            return ret;
    }
    
    if(root->left){
        ret  &= isValidBST(root->left) && root->val > max;
        if(!root->right)
            return ret;
    }
    
    return ret;
}

猜你喜欢

转载自blog.csdn.net/weixin_36094222/article/details/90137682