当前位置: 首页 > news >正文

LeetCode 解题思路 22(Hot 100)

在这里插入图片描述

解题思路:

  1. 递归思路: 传入当前节点的最小值和最大值,递归判断左右子树。
  2. 结束条件: 当前节点为空或不满足二叉搜索树。

Java代码:

class Solution {
    public boolean isValidBST(TreeNode root) {
        return isValidBST(root, Long.MIN_VALUE, Long.MAX_VALUE);
    }

    public boolean isValidBST(TreeNode node, long lower, long upper) {
        if (node == null) return true;
        if (node.val <= lower || node.val >= upper) return false;
        return isValidBST(node.left, lower, node.val) && isValidBST(node.right, node.val, upper);
    }
}

复杂度分析:

  • 时间复杂度: O(n),其中 n 是二叉树的节点数。每个节点恰好被访问一次。
  • 空间复杂度: O(h),其中 h 是二叉树的高度。空间复杂度主要由递归调用栈的深度决定,最坏情况下(树退化为链表)为O(n),平衡树情况下为O(logn)。

在这里插入图片描述

解题思路:

  1. 中序遍历: 先递归遍历左子树,再处理当前节点,最后遍历右子树。
  2. 递减 k: 每次访问节点时,将 k 减 1。当 k 减至 0 时,当前节点即为第 k 小的元素。
  3. 提前终止: 一旦找到第 k 小的元素,后续递归调用会因 k == 0 直接返回,避免多余遍历。

Java代码:

class Solution {
    int result, k;

    private void dfs(TreeNode root) {
        if (root == null) return;
        
        dfs(root.left);
        if (--k == 0) result = root.val;
        dfs(root.right);
    }

    public int kthSmallest(TreeNode root, int k) {
        this.k = k;
        dfs(root);
        return result;
    }
}

复杂度分析:

  • 时间复杂度: O(k),最坏情况下需要访问前 k 个节点。
  • 空间复杂度: O(h),h 为树的高度。
http://www.dtcms.com/a/79810.html

相关文章:

  • 9.嗅探与Wireshark进阶分析
  • 使用Python在Word中创建、读取和删除列表 - 详解
  • DeepSeek接入多模态,个人电脑也能飞速生成高清图,确实可以封神了!
  • 目前主要虚拟世界平台在单一实例承载人数和伺服器架构的综合比较分析(从开资料和技术推估):
  • 寄存器(内部访问)
  • WordPress靶场攻略
  • 微服务》》Kubernetes (K8S) 集群配置网络》》Calico
  • deepseek使用记录24——小灵
  • docker、docker-compose常用命令
  • Java 实现排序算法 TopK 问题
  • AcWing 839:模拟堆 ← multiset + unordered_map
  • 4.玩转热图(续:矩阵式网络关系热图、Pivot Table 热图、三维/交互式热图)——Python数据挖掘代码实践
  • 2025年优化算法:人工旅鼠算法(Artificial lemming algorithm,ALA)
  • Devops之Docker:Docker入门
  • Pandas数据分析
  • 深入解析 Service Worker 在 Chrome 扩展中的应用
  • redis,tar.gz安装后,接入systemctl报错解决
  • ESP32 BLE 初步学习笔记
  • 嵌入式C语言进阶(四)指针
  • NO.51十六届蓝桥杯备战|堆算法题|第k小|除2|最小函数值|序列合并|舞蹈课(C++)
  • CAN通信转TCP/IP通信协议解析
  • 蓝桥杯关于栈这个数据结构的一个算法题目
  • 【自学笔记】NFT基础知识点总览-持续更新
  • ⭐算法OJ⭐二叉树的后序遍历【树的遍历】(C++实现)Binary Tree Postorder Traversal
  • Mysql-经典实战案例(4):XtraBackup+binlog恢复实战
  • Python 位运算符大全
  • 【架构】单体架构 vs 微服务架构:如何选择最适合你的技术方案?
  • 推荐HttpClient工具类
  • 2025.3.20总结
  • 暗光增强技术研究进展与产品落地综合分析(2023-2025)