「每日LeetCode」2021年10月17日

本文最后更新于:2023年3月19日 晚上

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

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

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

示例 1:
输入:root = [3,1,4,null,2], k = 1 输出:1
image.png
示例 2:
输入:root = [5,3,6,2,4,null,null,1], k = 3 输出:3

提示:

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

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

思路

中序遍历,同时计数,如果 count=k,说明找到了,不再进行其他遍历,最后返回 res。

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @param {number} k
* @return {number}
*/
var kthSmallest = function (root, k) {
let count = 0,
res;
const visit = (node) => {
if (!node) return;
!res && visit(node.left);
if (++count === k) res = node.val;
!res && visit(node.right);
};
visit(root);
return res;
};