详细思路

递归难点在于dfs函数、参数、返回值的定义和返回的时机(边界返回,提前返回,最后返回)
dfs,有上界up和下界low,判断左右子树是否超出up和low,左子树的up是root->val,右子树的low是root->val
 
精确定义
dfs判断root树是否在up和low之内,如果是空就是true,如果不满足提前返回,最后返回
class Solution {
public:
    bool isValidBST(TreeNode* root) {
        return dfs(root,LONG_MAX,LONG_MIN);
    }
    bool dfs(TreeNode*root,long long up,long long low){
        if(!root)return true;
        if(root->val>=up||root->val<=low)return false;
        return dfs(root->left,root->val,low)&&dfs(root->right,up,root->val);
    }
};

踩过的坑
        return dfs(root,LONG_MAX,LONG_MIN);

 

posted on 2021-08-01 16:59  offer快到碗里来~  阅读(34)  评论(0)    收藏  举报