题目描述: 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
1. 节点的左子树只包含 小于 当前节点的数。
2.节点的右子树只包含 大于 当前节点的数。
3.所有左子树和右子树自身必须也是二叉搜索树。
示例 1:
输入:root = [2,1,3]
输出:true
示例 2:
输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是 4 。
**方法一:**递归法,下面请看代码:
C++:
bool helper(TreeNode *root, long long lower, long long upper)
{
if (root == nullptr)
{
return true;
}
if (root->val <= lower || root->val >= upper)
{
return false;
}
return helper(root->left, lower, root->val) && helper(root->right, root->val, upper);
}
bool isValidBST(TreeNode *root)
{
return helper(root, LONG_MIN, LONG_MAX);
}
**方法二:**中序遍历法
Java版:
long pre = Long.MIN_VALUE;
public boolean isValidBST(TreeNode root)
{
if(root==null)
return true;
//访问左子树
if(!isValidBST(root.left))
return false;
//访问当前树
if(root.val<pre)
return false;
pre = root.val;
//访问右子树
return isValidBST(root.right);
}