problem:
Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
confused what "{1,#,2,3}" means? >
read more on how binary tree is serialized on OJ.
thinking:
(1)开始试着用递归写了一个程序,对搜索二叉树的定义曲解了。仅仅比较了左孩子和右孩子。是错的。
class Solution {
public:
bool isValidBST(TreeNode *root) {
if(root==NULL)
return true;
TreeNode *parent = root;
TreeNode *left_child=parent->left;
TreeNode *right_child=parent->right;
bool r=true;
bool l=true;
if(left_child!=NULL)
{
if(left_child->val<parent->val)
l=isValidBST(left_child);
else
l=false;
}
if(right_child!=NULL)
{
if(right_child->val>parent->val)
r=isValidBST(right_child);
else
r=false;
}
return l&&r;
}
};code:
class Solution {
public:
bool isValidBST(TreeNode *root)
{
vector<int> ret=inorderTraversal(root);
int n=ret.size();
if(n<2)
return true;
for(int i=1;i<n;i++)
{
if(ret[i]<=ret[i-1])
return false;
}
return true;
}
protected:
vector<int> inorderTraversal(TreeNode *root) {
vector<int> ret;
stack<TreeNode*> _stack;
TreeNode *tmp=root;
while(tmp!=NULL || !_stack.empty())
{
if(tmp!=NULL)
{
_stack.push(tmp);
tmp=tmp->left;
}
else
{
tmp=_stack.top();
_stack.pop();
ret.push_back(tmp->val);
tmp=tmp->right;
}
}
return ret;
}
};leetcode || 98、Validate Binary Search Tree
原文地址:http://blog.csdn.net/hustyangju/article/details/45097673