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.
A single node tree is a BST
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/*
* @param root: The root of binary tree.
* @return: True if the binary tree is BST, or false
*/
//root is not null
int getBSTMax(TreeNode * root)
{
TreeNode * node = root;
while(node->right)
{
node = node->right;
}
return node->val;
}
//root is not null
int getBSTMin(TreeNode * root)
{
TreeNode * node = root;
while(node->left)
{
node = node->left;
}
return node->val;
}
bool isValidBST(TreeNode * root) {
// write your code here
if(!root)
{
return true;
}
if(!root->left && !root->right)
{
return true;
}
bool isLeftValidBST = true;
bool isRightValidBST = true;
if(root->left)
{
if(getBSTMax(root->left) >= root->val || !isValidBST(root->left))
{
isLeftValidBST = false;
}
}
if(root->right)
{
if(getBSTMin(root->right) <= root->val || !isValidBST(root->right))
{
isRightValidBST = false;
}
}
return isLeftValidBST&&isRightValidBST;
}
};