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
相关推荐
a努力。8 分钟前
LangChain Agent消息链路全解析
java·前端·javascript
SL_staff14 分钟前
物模型是设备的数字身份证:属性、事件、服务如何决定IoT系统扩展性
java·物联网·全栈
程序员yu17 分钟前
会编网络:别被入门教程骗了,Python实用能力不在语法本身
开发语言·python·学习·算法
资深技术分享员23 分钟前
Geejing WebBuilder 日志、在线用户、系统监控,出问题时的三个第一现场
java·运维·数据库
卓怡学长26 分钟前
w202springboot基于B_S架构的图书信息管理系统
java·spring boot·spring·intellij-idea
走到天涯海角34 分钟前
用springBoot写几个简单的接口
java·spring boot·intellij-idea
troy12842 分钟前
Java 技术栈全景指南:从基础到微服务的完整知识体系
java·开发语言·微服务
Escalating_xu1 小时前
【C 语言】深入理解指针(2):数组名、数组传参、二级指针与指针数组
java·c语言·开发语言
景熙55231 小时前
JDBC 详解:从原理到实战(含完整可运行 Demo)
java·spring·tomcat·mybatis·jdbc
Allen_LVyingbo1 小时前
信息化部门在AI时代的编程转移路径分析(上)
人工智能·python·算法·健康医疗·数据库开发·时序数据库·数据库架构