题目描述
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 keysless than the node's key.
- The right subtree of a node contains only nodes with keysgreater than the node's key.
- Both the left and right subtrees must also be binary search trees.
confused what"{1,#,2,3}"means? > read more on how binary tree is serialized on OJ.
OJ's Binary Tree Serialization:
The serialization of a binary tree follows a level order traversal, where '#' signifies a path terminator where no node exists below.
Here's an example:
1 / \ 2 3 / 4 \ 5The above binary tree is serialized as"{1,2,3,#,#,4,#,#,5}".
递归:
class Solution {
public:
//递归方法
TreeNode *pre = NULL;
bool isValidBST(TreeNode *root)
{
if(!root)
{
return true;
}
bool left = isValidBST(root -> left);
if(pre)
{
if(pre -> val >= root -> val)
return false;
}
pre = root;
bool right = isValidBST(root -> right);
return left && right;
}
bool isValidBST(TreeNode *root)
{
if(!root)
{
return true;
}
TreeNode *pre = NULL;
TreeNode *current = root;
stack<TreeNode *>temp;
while(current || !temp.empty())
{
while(current)
{
temp.push(current);
current = current -> left;
}
if(!temp.empty())
{
current = temp.top();
temp.pop();
if(pre && pre -> val >= current -> val)
{
return false;
}
pre = current;
current = current -> right;
}
}
return true;
}