您的位置:首页 > 其它

leetcode || 98、Validate Binary Search Tree

2015-04-17 15:35 399 查看
problem:

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.

confused what
"{1,#,2,3}"
means? >
read more on how binary tree is serialized on OJ.

Hide Tags
Tree Depth-first
Search

题意:判断一颗二叉树是否为搜索二叉树,注意搜索二叉树的性质:左子树的所有节点小于父节点,

右子树的所有节点大于父节点

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;
}
};


(2)正确解法是:中序遍历。采用DFS(非递归法)中序遍历二叉树,节点的VAL 应该是一个递增序列。

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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: