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;
    }
};  
相关推荐
代码AC不AC1 分钟前
【C++】STL简介
c++·stl简介
Wnq100727 分钟前
工业场景轮式巡检机器人纯视觉识别导航的优势剖析与前景展望
人工智能·算法·计算机视觉·激光雷达·视觉导航·人形机器人·巡检机器人
unityのkiven22 分钟前
C++中的虚表和虚表指针的原理和示例
开发语言·c++
火山灿火山34 分钟前
【简单模拟实现list】
c++
芯眼1 小时前
STM32启动文件详解(重点)
java·开发语言·c++·stm32·单片机·mybatis
天上路人2 小时前
AI神经网络降噪算法在语音通话产品中的应用优势与前景分析
深度学习·神经网络·算法·硬件架构·音视频·实时音视频
好吃的肘子2 小时前
MongoDB 应用实战
大数据·开发语言·数据库·算法·mongodb·全文检索
汉克老师2 小时前
GESP2025年3月认证C++二级( 第三部分编程题(1)等差矩阵)
c++·算法·矩阵·gesp二级·gesp2级
sz66cm3 小时前
算法基础 -- 小根堆构建的两种方式:上浮法与下沉法
数据结构·算法
独行soc3 小时前
2025年渗透测试面试题总结-阿里云[实习]阿里云安全-安全工程师(题目+回答)
linux·经验分享·安全·阿里云·面试·职场和发展·云计算