JAVA练习312- 二叉搜索树中第 K 小的元素

题目概览

给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k小的元素(k 从 1 开始计数)。

示例 1:

复制代码
输入:root = [3,1,4,null,2], k = 1
输出:1

示例 2:

复制代码
输入:root = [5,3,6,2,4,null,null,1], k = 3
输出:3

提示:

  • 树中的节点数为 n
  • 1 <= k <= n <= 104
  • 0 <= Node.val <= 104

进阶: 如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k 小的值,你将如何优化算法?

来源:230. 二叉搜索树中第 K 小的元素 - 力扣(LeetCode)

解题分析

方法:中序遍历

中序遍历是 左-根-右,遍历出来的数一定是递增的,因此我们只需要在遍历时记录次数,返回第 k 个节点。

时间复杂度:O(k)

空间复杂度:O(n)

java 复制代码
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public int kthSmallest(TreeNode root, int k) {
        Deque<TreeNode> dq = new LinkedList<>();
        while(root != null || !dq.isEmpty()) {
            while(root != null) {
                dq.push(root);
                root = root.left;
            }
            TreeNode node = dq.pop();
            if (k-- == 1) {
                return node.val;
            }
            root = node.right;
        }
        return -1;
    }
}
相关推荐
2601_962128648 分钟前
【JavaWeb06】Tomcat基础入门:架构理解与基本配置指南
java·架构·tomcat
要开心吖ZSH9 分钟前
腾讯 IM × TRTC 联动实战:后端如何撑起一次视频问诊(混流录制篇)
java·音视频·腾讯云·健康医疗·即时通讯·im
吴声子夜歌11 分钟前
Java——类、对象及方法(二)
java·开发语言
2401_8906034014 分钟前
Python入门语法(一)
java·开发语言·python
小蒜学长15 分钟前
springboot党建云课堂学习与管理系统(代码+数据库+LW)
java·数据库·spring boot·后端·学习
mldong26 分钟前
六语言引擎实现对比:同构背后的妥协与差异
java·架构
Chester_19998 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
裕晟资质规划9 小时前
武器装备科研生产单位保密资质申请方法论:条件模型与流程拆解
人工智能·算法
EXI-小洲9 小时前
Java 操作 Word:字符串替换、图片插入、动态生成表格与API接口下载
java·开发语言·spring boot·word
2601_9619017010 小时前
SpringBoot使用Nacos进行application.yml配置管理
java·spring boot·spring