/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool Traverseleft(TreeNode *root, int val) {
if (root->val >=val) {
return false;
}
if (root->left) {
if (!Traverseleft(root->left, val)) {
return false;
}
}
if (root->right) {
if (!Traverseleft(root->right, val)) {
return false;
}
}
return true;
}
bool Traverseright(TreeNode *root, int val) {
if (root->val <=val) {
return false;
}
if (root->left) {
if (!Traverseright(root->left, val)) {
return false;
}
}
if (root->right) {
if (!Traverseright(root->right, val)) {
return false;
}
}
return true;
}
bool isValidBST(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if (root==NULL) {
return true;
}
if (root->left==NULL && root->right==NULL) {
return true;
}
if (root->left!=NULL) {
if (!Traverseleft(root->left, root->val)) {
return false;
}
if (!isValidBST(root->left)) {
return false;
}
}
if (root->right!=NULL) {
if (!Traverseright(root->right, root->val)) {
return false;
}
return isValidBST(root->right);
}
return true;
}
};
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
bool checkRange(TreeNode *root, int Min, int Max) {
if(!root) return true;
if (root->val <= Min || (root->val >= Max)) {
return false;
}
return checkRange(root->left, Min, root->val) && checkRange(root->right, root->val, Max);
}
bool isValidBST(TreeNode *root) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
return checkRange(root, -2147483648, 2147483647);
}
};