98.验证二叉搜索树

题目描述

题目描述

题解一(递归,设定上下边界)

思路

递归思路

代码

java 复制代码
class Solution {
    public boolean isValidBST(TreeNode root) {
        // 使用 Long 的最大最小值来初始化边界,防止测试用例中出现 Integer.MAX_VALUE 导致判断错误
        return isValid(root, Long.MIN_VALUE, Long.MAX_VALUE);
    }

    private boolean isValid(TreeNode node, long lower, long upper) {
        if (node == null) {
            return true;
        }
        
        // 如果当前节点的值不在允许的范围内,则不是二叉搜索树
        if (node.val <= lower || node.val >= upper) {
            return false;
        }
        
        // 递归检查左子树(上限改为当前节点的值)和右子树(下限改为当前节点的值)
        return isValid(node.left, lower, node.val) && isValid(node.right, node.val, upper);
    }
}

题解二(中序遍历)

思路

中序遍历思路

代码

java 复制代码
class Solution {
    // 记录前一个遍历到的节点的值,初始设为 Long.MIN_VALUE
    //把 pre 声明为类的成员变量时,所有的递归调用都在共享这同一个变量
    private long pre = Long.MIN_VALUE;

    public boolean isValidBST(TreeNode root) {
        if (root == null) {
            return true;
        }
        
        // 1. 访问左子树
        if (!isValidBST(root.left)) {
            return false;
        }
        
        // 2. 访问当前节点:如果当前节点的值小于等于前一个节点的值,说明破坏了递增性
        if (root.val <= pre) {
            return false;
        }
        pre = root.val; // 更新 pre 为当前节点的值
        
        // 3. 访问右子树
        return isValidBST(root.right);
    }
}

复杂度分析

  • 时间复杂度:O(N)O(N)O(N),其中 NNN 是二叉树的节点数。每个节点恰好被访问一次
  • 空间复杂度:O(H)O(H)O(H),其中 HHH 是二叉树的高度。最坏情况下(树退化成链表),递归调用栈的深度为 NNN;最好情况下(平衡二叉树),深度为 log⁡N\log NlogN
相关推荐
vipxieliang14 分钟前
虚拟线程与 GraalVM:Spring Boot 3.x 云原生性能跃迁
java·spring boot·后端
Rain的Java大神之路15 分钟前
面试官最烦的答案:“我用 Redis + Token”!接口幂等 8 种方案 + 四层防御,把重复扣款工单干到 0
java·后端·面试
在猴站学算法1 小时前
(《统计学习方法》(第2版) 李航)第2章 感知机算法
学习·算法·机器学习·统计学习
Rainmicro1 小时前
【无标题】
java·数据库·算法
驭渊的小故事1 小时前
Spring AOP 入门:从 AOP 概念到第一个耗时统计切面
java·后端·spring
天天被压力1 小时前
【A股分钟级高频数据完全手册 #09】A股历史分时交易数据接口:普通分时怎么批量下
java·人工智能·python
天天被压力1 小时前
【A股分钟级高频数据完全手册 #10】股票实时行情数据接口Python:公开源实时交易取数
java·人工智能·python
apcipot_rain2 小时前
C++转Java日记(05)
java·开发语言·c++
CoderYanger7 小时前
Java EE 进阶:8.MyBatis 操作数据库(入门)(第二弹)
java·数据库·spring boot·spring·面试·java-ee·mybatis
CQU_JIAKE10 小时前
11.7[高体】
java·后端·spring