230. 二叉搜索树中第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

提示:

  • 树中的节点数为 n 。
  • 1 <= k <= n <= 10^4
  • 0 <= Node.val <= 10^4

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

思路:
根据二叉搜索树的性质可知,其按照中序遍历序列可获得当前树的递增顺序序列。因此,通过递归中序遍历即可得到第K个元素的结果。

代码:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
//根据二叉搜索树与中序遍历的性质得:二叉搜索树中第k个节点即为中序遍历序列的第k个节点
    int kthSmallest(TreeNode* root, int k) {
        this->k = k;
        inorderTravel(root);
        return res;
    }
private:
    int k;
    int index=0;
    int res=0;

private:
    void inorderTravel(TreeNode* root){
        if(root==nullptr) return;
        inorderTravel(root->left);
        index++;
        if(k == index){
            res = root->val;
            return;
        } 
        inorderTravel(root->right);
    }
};

相关推荐

  1. 力扣230. 搜索K元素

    2024-06-15 23:32:02       39 阅读
  2. 【力扣100】230.搜索k元素

    2024-06-15 23:32:02       48 阅读
  3. Leetcode-230.搜索k元素(Python)

    2024-06-15 23:32:02       40 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-15 23:32:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-15 23:32:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-15 23:32:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-15 23:32:02       18 阅读

热门阅读

  1. 基于SpringCloudAlibaba的微服务架构设计模式

    2024-06-15 23:32:02       7 阅读
  2. C语言刷题(函数)

    2024-06-15 23:32:02       6 阅读
  3. Linux 用户权限 管理员与普通用户区别 sudo命令

    2024-06-15 23:32:02       8 阅读
  4. CSS3 2D变换、3D变换、过渡、动画

    2024-06-15 23:32:02       5 阅读
  5. Docker镜像构建:Ubuntu18.04+python3.10

    2024-06-15 23:32:02       8 阅读
  6. 解释 RESTful API, 如何使用它构建 web 应用程序

    2024-06-15 23:32:02       7 阅读
  7. Day39

    2024-06-15 23:32:02       4 阅读
  8. C++封装dll lib

    2024-06-15 23:32:02       11 阅读
  9. 技术周总结2024.06.10~06.16

    2024-06-15 23:32:02       6 阅读
  10. 【LVGL v8.3】切换界面时内存变化分析

    2024-06-15 23:32:02       7 阅读
  11. 支持向量机(SVM)中核函数的本质意义

    2024-06-15 23:32:02       6 阅读