验证二叉搜索树

中序遍历升序

递归

设置一个区间(lower, upper)

在遍历左子树时将upper设为根节点的值

在遍历右子树时将lower设为根节点的值

那么左子树不能大于根节点, 即不能小于upper, 右子树不能小于根节点, 即不能小于lower

class Solution {
    public boolean isValidBST(TreeNode root) {
        // val的范围是int, 注意加L 默认是int类型会溢出
        return recur(root, Integer.MIN_VALUE - 1L, Integer.MAX_VALUE + 1L);
    }

    public boolean recur(TreeNode root, long lower, long upper) {
        if(root == null)
            return true;
        if(root.val <= lower || root.val >= upper)
            return false;
        // 左子树都小于根节点 将upper设为根节点
        // 右子树都大于根节点 将lower设为根节点
        return recur(root.left, lower, root.val) && recur(root.right, root.val, upper);
    }
}
posted @ 2022-02-10 23:04  brbrbr  阅读(28)  评论(0)    收藏  举报