leetcode每日一题-「验证二叉搜索树」

132 阅读1分钟

【题目标题】

验证二叉搜索树

【题目描述】

给你一个二叉树的根节点 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);
    }
}