前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图解LeetCode——230. 二叉搜索树中第K小的元素

图解LeetCode——230. 二叉搜索树中第K小的元素

原创
作者头像
爪哇缪斯
修改2023-07-13 22:51:53
2150
修改2023-07-13 22:51:53
举报
文章被收录于专栏:爪哇缪斯

一、题目

给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。

二、示例

2.1> 示例 1:

输入】root = [3,1,4,null,2], k = 1 【输出】1

2.2> 示例 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小的元素,我们需要创建一个全局的计数器count只有当count等于k之后,那么就表示我们已经找到了第K小的元素了

那么如果我们找到了第K小的元素了之后,如果让后续的遍历可以快速结束呢,我们还可以通过创建一个全局变量result,默认值为-1,当我们找到了第K小的元素之后,将该节点的值赋值给result,那么在后续的遍历过程中,如果我们发现result不等于-1了,则表示已经找到了第K小的元素了,那么直接返回即可

以上就是本题的解题思路,为了便于理解,我们以输入为root = [5,3,6,2,4,null,null,1], k = 3为例,寻找第3小的元素。具体操作请见下图所示:

四、代码实现

代码语言:javascript
复制
class Solution {
    int count = 0, result = -1;
    public int kthSmallest(TreeNode root, int k) {
        if (root == null || result != -1) return result;
        kthSmallest(root.left, k);
        if (++count == k) result = root.val;  
        kthSmallest(root.right, k);
        return result;
    }
}

今天的文章内容就这些了:

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、题目
  • 二、示例
    • 2.1> 示例 1:
      • 2.2> 示例 2:
        • 提示:
        • 三、解题思路
        • 四、代码实现
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档