98.验证二叉搜索树
题目描述
给定一个二叉树,判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征:
- 节点的左子树只包含小于当前节点的数。
- 节点的右子树只包含大于当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
![](https://gitee.com//junchao-ustc/picture/raw/master/img/20200528090516.png)
题解:中序遍历
代码1:
- 设置一个最小值pre作为起始最小值
- 访问左子树到达叶节点,判断当前节点是否大于中序遍历前一个节点。再将pre设置新值
- 访问右节点
class Solution {
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);
}
}
代码2:
class Solution {
long pre = Long.MIN_VALUE;
public boolean isValidBST(TreeNode root) {
if(root==null) return true;
//左子树
if(isValidBST(root.left)){
//根节点符合条件
if(pre<=root.val){
//进入右子树
return isValidBST(root.right);
}
}
return false;
}
}