力扣98 验证二叉搜索树

题目:

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
    节点的左子树只包含 小于 当前节点的数。
    节点的右子树只包含 大于 当前节点的数。
    所有左子树和右子树自身必须也是二叉搜索树。

示例:

输入:root = [2,1,3]
输出:true

思路:

这题最容易出现的错误思路就是:单纯的比较左节点小于中间节点,右节点大于中间节点。即使递归处理了,得到的结果也是错的,比如遇到以下情况:这里10>6,但是每一层都满足单层逻辑。

 我们要比较的是 左子树所有节点小于中间节点,右子树所有节点大于中间节点

class Solution {
    TreeNode max;
    public boolean isValidBST(TreeNode root) {//1.确定参数和返回值
        if (root == null) {//2.确定终止条件
            return true;
        }
        //3.单层逻辑:中序遍历,验证遍历的元素是不是从小到大
        //
        boolean left = isValidBST(root.left);
        //
        if (max != null && root.val <= max.val) {//如果当前节点值不大于上一个节点的值,则不满足二叉搜索树
            return false;
        }
        max = root;
        //
        boolean right = isValidBST(root.right);
        return left&&right;
    }
}

 

 

 

 

 

posted @ 2023-02-03 21:06  壹索007  阅读(17)  评论(0编辑  收藏  举报