Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
- The left subtree of a node contains only nodes with keys less than the node's key.
- The right subtree of a node contains only nodes with keys greater than the node's key.
- Both the left and right subtrees must also be binary search trees.
Difficulty:Medium
int flag1 = 0, flag2 = 0;
bool valid(TreeNode* root,int min,int max){
if(root==NULL)
return true;
if(root->val==2147483647&&flag1==1)
return false;
if(root->val==-2147483648&&flag2==1)
return false;
if(root->val==2147483647)
flag1 =1;
if(root->val==-2147483648)
flag2 =1;
if(root->val==2147483647&&max==2147483647)
{
if(root->right!=NULL||(root->left!=NULL&&root->left->val==2147483647))
return false;
else
goto cont;
}
if(root->val==-2147483648&&min==-2147483648)
{
if(root->left!=NULL||(root->right!=NULL&&root->right->val==-2147483648))
return false;
else
goto cont;
}
if(root->val<=min||root->val>=max)
return false;
cont:
if(valid(root->left,min,root->val)&&valid(root->right,root->val,max))
return true;
else
return false;
}
bool isValidBST(TreeNode* root) {
return valid(root,-2147483648,2147483647);
}