一、题目描述
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
- 节点的左子树只包含 小于 当前节点的数。
- 节点的右子树只包含 大于 当前节点的数。
- 所有左子树和右子树自身必须也是二叉搜索树。
示例 1:
输入:root = [2,1,3]
输出:true
示例 2:
输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是 4 。
二、解题
中序遍历 + 递归
当前节点是否大于中序遍历的前一个节点,如果大于,说明满足 BST,继续遍历;否则直接返回 false。
class Solution {
long pre = Long.MIN_VALUE;
public boolean isValidBST(TreeNode root) {
//中序遍历
if(root == null){
return true;
}
//访问左子树
if(isValidBST(root.left) == false){
return false;
}
if(root.val <= pre){
return false;
}
pre = root.val;
return isValidBST(root.right);
}
}
递归
class Solution {
public boolean isValidBST(TreeNode root) {
//递归
return ValidBST(root,Long.MIN_VALUE, Long.MAX_VALUE);
}
public boolean ValidBST(TreeNode root,long low,long high){
if(root == null){
return true;
}
if(root.val <= low || root.val >= high){
return false;
}
return ValidBST(root.left,low,root.val) && ValidBST(root.right,root.val,high);
}
}