Given a binary tree, determine if it is a valid binary search tree (BST).
Assume a BST is defined as follows:
Example 1:
2 / 1 3Binary tree
[2,1,3],
 return true.
Example 2:
1 / 2 3Binary tree
[1,2,3],
 return false.
判断是否为有效的二叉搜索树
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {    //易错点,不是左结点的值小于根节点的值,是左子树所有的结点小于根节点
public:  //解法1
//即左<根<右,初始化时带入系统最大值和最小值,在递归过程中换成它们自己的节点值,用long代替int就是为了包括int的边界条件。
    bool isValidBST(TreeNode* root) {
        return helper(root,LONG_MIN,LONG_MAX);
    }
    bool helper(TreeNode* root,long left,long right)
    {
        if(root==NULL)
            return true;
        if(root->val<=left||root->val>=right)
            return false;
        return helper(root->left,left,root->val)&&helper(root->right,root->val,right);
    }
};/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {  //解法2,中序遍历,左根右
public:
    vector<int> res;
    bool isValidBST(TreeNode* root) {
        if(root==NULL)return true;
        inorder(root);
        for(int i=0;i<res.size()-1;i++)
            if(res[i]>=res[i+1])
                return false;
        return true;
    }
    void inorder(TreeNode* root)
    {
        stack<TreeNode*> s;
        while(root!=NULL||!s.empty())
        {
            if(root!=NULL)
            {
                s.push(root);
                root=root->left;
                continue;
            }
            else
            {
                root=s.top();
                s.pop();
                res.push_back(root->val);
                root=root->right;
            }
        }
    }
};leetcode No98. Validate Binary Search Tree
原文:http://blog.csdn.net/u011391629/article/details/52227641