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.
Example 1:
Input: [2,1,3]
Output: true
Example 2:
Input: [5,1,4,null,null,3,6]
Output: false
Explanation: The root node’s value is 5 but its right child’s value is 4.
C++
bool isValidBST(TreeNode* root) {
if(root == nullptr)
return true;
return DFS(root,LONG_MAX,LONG_MIN);
}
bool DFS(TreeNode* root,long m,long n)
{
if(root == nullptr)
return true;
if(root->val >= m||root->val <= n)
return false;
return DFS(root->left,root->val,n)&&DFS(root->right,m,root->val);
}
C++
bool isValidBST(TreeNode* root) {
vector<int> inorder;
Inorder(root,inorder);
for(int i = 1;i < inorder.size();++i)
{
if(inorder[i] <= inorder[i-1])
return false;
}
return true;
}
void Inorder(TreeNode* root,vector<int>& inorder)
{
if(root == nullptr)
return;
Inorder(root->left,inorder);
inorder.push_back(root->val);
Inorder(root->right,inorder);
}