【LeetCode刷题】NO.49---第230题

108 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一.题目:

230. 二叉搜索树中第K小的元素

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

示例 1:

image.png

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

示例 2:

image.png

输入: 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步的时候就可以跳出函数直接将结果返回即可。

三、代码:

var kthSmallest = function(root, k) {
    //中序遍历呗
    let res = 0
    let rank = 0
    const travel =function(root,k){
        if(root == null)return 
        travel(root.left,k)
        rank++
        if(rank == k){
            res = root.val
            return
        }
        travel(root.right,k)
    }
    travel(root,k)
    return res
};

四、总结:

这道题目主要是考察了二叉搜索树的思想,我们需要理解什么是二叉搜索树,不然我们的解法会比较复杂,所以我们在做题目的同时需要了解到各种结构而不是盲目地去做题。