【题目标题】
验证二叉搜索树
【题目描述】
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。
示例 1: 输入:root = [2,1,3] 输出:true
示例 2: 输入:root = [5,1,4,null,null,3,6] 输出:false 解释:根节点的值是 5 ,但是右子节点的值是 4 。
提示: 树中节点数目范围在[1, 10⁴] 内 -2³¹ <= Node.val <= 2³¹ - 1
【解题思路】
【深度优先搜索】
要求一个二叉树是不是二叉搜索树。
我们知道,所谓二叉搜索树,其左子树上的值小于根节点的值,其右子树上的值大于根节点的值,并且每个子树都是如此。也就是说,其从左到根节点到右的排列能组成一个递增序列。
那我们很容易想到用二叉树深度优先搜索中的中序遍历,在遍历的同时,比较遍历的后面节点是否大于等于前面节点的值,只要有一个不是大于等于的,那这个二叉树就不是二叉搜索树。
【代码实现】
class Solution {
long pre = Long.MIN_VALUE;
public boolean isValidBST(TreeNode root) {
if (root == null) {
return true;
}
boolean leftResult = isValidBST(root.left);
if (Boolean.FALSE.equals(leftResult)) {
return false;
}
if (root.val <= pre) {
return false;
}
pre = root.val;
return isValidBST(root.right);
}
}