题目:
分析:
return f(min((long long)root->val,x),y,root->left) && f(x,max((long long)root->val,y),root->right);
这个条件分析刚开始还写错了啊
左子树的话,应该增加一个上限,但是之前子树,有一个更小的上限。
右子树的话,应该增加一个下限,但是之前子树,有一个更大的下限。
简直胡说八道。
代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool f(long long x,long long y,TreeNode* root)
{//max min
if(root==NULL) return 1;
if(x<=root->val || y>=root->val) return 0;
return f(min((long long)root->val,x),y,root->left) && f(x,max((long long)root->val,y),root->right);
}
bool isValidBST(TreeNode* root) {
return f((long long)(1)<<32,-((long long)(1)<<32),root);
}
};
不用啊:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool f(long long x,long long y,TreeNode* root)
{//max min
if(root==NULL) return 1;
if(x<=root->val || y>=root->val) return 0;
return f((long long)root->val,y,root->left) && f(x,(long long)root->val,root->right);
}
bool isValidBST(TreeNode* root) {
return f((long long)(1)<<32,-((long long)(1)<<32),root);
}
};