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;
    }
};  
相关推荐
choumin8 小时前
创建型模式——工厂方法模式
c++·设计模式·工厂方法模式·创建型模式
云小逸8 小时前
【SVN 详细使用指南:从入门到团队协作】
c++·svn
徐小夕9 小时前
花了一周,3亿tokens,我开源了一款 Word 文档智能审查平台,文稿自动质检+可视化分析,告别低效人工审核
前端·算法·github
可编程芯片开发11 小时前
UPFC统一潮流控制器的simulink建模与仿真
算法
小小仙子11 小时前
矢量网络分析仪如何测试S参数的?
人工智能·算法·机器学习
code bean12 小时前
【C#】 `Channel<T>` 深度解析:生产者-消费者模式的现代解法
数据结构·c#
中微极客13 小时前
降维算法75倍加速:从PCA到稀疏字典学习的工程实践
人工智能·学习·算法
storyseek13 小时前
前缀和实现Kogge-Stone算法
数据结构·算法
ziguo112213 小时前
深入浅出 C/C++ 数据类型:从入门到踩坑
linux·c语言·c++·windows·visual studio