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

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

一、题目

给定一个二叉搜索树的根节点 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小的元素。具体操作请见下图所示:

四、代码实现

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;
    }
}

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

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

更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

相关文章
|
1月前
|
机器学习/深度学习 存储 算法
LeetCode 题目 95:从递归到动态规划实现 不同的二叉搜索树 II
LeetCode 题目 95:从递归到动态规划实现 不同的二叉搜索树 II
|
1月前
|
算法
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
【经典LeetCode算法题目专栏分类】【第10期】排序问题、股票问题与TOP K问题:翻转对、买卖股票最佳时机、数组中第K个最大/最小元素
|
1月前
|
存储 算法 数据可视化
LeetCode 题目 96:从动态规划、递归到卡塔兰数实现不同的二叉搜索树
LeetCode 题目 96:从动态规划、递归到卡塔兰数实现不同的二叉搜索树
|
13天前
2670.找出不同元素数目差数组-力扣(LeetCode)
2670.找出不同元素数目差数组-力扣(LeetCode)
6 0
|
1月前
|
算法 搜索推荐 Java
【经典算法】LeetCode 215. 数组中的第K个最大元素(Java/C/Python3实现含注释说明,Medium)
【经典算法】LeetCode 215. 数组中的第K个最大元素(Java/C/Python3实现含注释说明,Medium)
17 3
|
17天前
|
存储 算法 Java
力扣经典150题第四十五题:存在重复元素 II
力扣经典150题第四十五题:存在重复元素 II
10 0
|
2月前
题目----力扣--移除链表元素
题目----力扣--移除链表元素
26 1
|
26天前
|
索引
leetcode题解:27.移除元素
leetcode题解:27.移除元素
19 0
|
1月前
|
存储 算法 数据挖掘
力扣173题:二叉搜索树迭代器(含模拟面试)
力扣173题:二叉搜索树迭代器(含模拟面试)
|
1月前
|
存储 SQL 算法
LeetCode 83题:删除排序链表中的重复元素【面试】
LeetCode 83题:删除排序链表中的重复元素【面试】