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;
    }
};  
相关推荐
invincible_Tang1 小时前
R格式 (15届B) 高精度
开发语言·算法·r语言
快来卷java2 小时前
MySQL篇(一):慢查询定位及索引、B树相关知识详解
java·数据结构·b树·mysql·adb
独好紫罗兰2 小时前
洛谷题单2-P5715 【深基3.例8】三位数排序-python-流程图重构
开发语言·python·算法
牵牛老人2 小时前
C++设计模式-责任链模式:从基本介绍,内部原理、应用场景、使用方法,常见问题和解决方案进行深度解析
c++·设计模式·责任链模式
序属秋秋秋2 小时前
算法基础_基础算法【高精度 + 前缀和 + 差分 + 双指针】
c语言·c++·学习·算法
玉树临风ives3 小时前
leetcode 2360 图中最长的环 题解
算法·leetcode·深度优先·图论
想睡hhh3 小时前
c语言数据结构——八大排序算法实现
c语言·数据结构·排序算法
KeithTsui3 小时前
GCC RISCV 后端 -- 控制流(Control Flow)的一些理解
linux·c语言·开发语言·c++·算法
mNinGInG3 小时前
c++练习
开发语言·c++·算法
EPSDA4 小时前
Boost库中的谓词函数
c++