LeetCode hot 100—二叉搜索树中第K小的元素

题目

给定一个二叉搜索树的根节点 root ,和一个整数 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

分析

二叉搜索树(BST)的一个重要特性是中序遍历的结果是一个有序序列,利用这个特性可以找出第 k 小的元素。

递归法

递归过程

  • 递归调用 inorder 函数遍历左子树。
  • 每次访问一个节点时,count 加 1。
  • count 等于 k 时,说明找到了第 k 小的元素,将该节点的值赋给 result 并返回。
  • 递归调用 inorder 函数遍历右子树。

时间复杂度:O(), 是树的高度

空间复杂度:O()

cpp 复制代码
class Solution {
private:
    int count = 0;
    int result = 0;
    void inorder(TreeNode* node, int k) {
        if (!node) return;
        // 先遍历左子树
        inorder(node->left, k);
        // 计数器加 1
        count++;
        if (count == k) {
            result = node->val;
            return;
        }
        // 再遍历右子树
        inorder(node->right, k);
    }
public:
    int kthSmallest(TreeNode* root, int k) {
        inorder(root, k);
        return result;
    }
};  
相关推荐
Dillon Dong2 小时前
【风电控制】TI TMS320F28379D 双CPU架构解析与任务分布设计
嵌入式硬件·算法·变流器·风电控制
NiceCloud喜云8 小时前
Opus 4.8 的 Effort Control 怎么选:Low 到 Max 五档策略
android·java·大数据·前端·c++·python·spring
小羊在睡觉8 小时前
力扣84. 柱状图中最大的矩形
后端·算法·leetcode·golang·go
cjhbachelor8 小时前
c++继承
c++
3DVisionary8 小时前
蓝光三维扫描:医疗制造的精度焦虑怎么解
人工智能·算法·制造·蓝光三维扫描·医疗制造·三维检测·义齿检测
jiayong238 小时前
面试中遇到不熟悉问题的应对策略深度解析
面试·职场和发展
好评笔记8 小时前
机器学习面试八股——常用损失函数
人工智能·深度学习·算法·机器学习·校招
weixin_468466858 小时前
全局与局部注意力机制新手实战指南
人工智能·python·深度学习·算法·自然语言处理·transformer·注意力机制
肩上风骋8 小时前
C++14特性
开发语言·c++·c++14特性
sheeta19989 小时前
LeetCode 每日一题笔记 日期:2026.05.29 题目:3300. 最小元素
笔记·leetcode