LeetCode-230-二叉搜索树中第k小的元素

题目

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

示例 1:

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

示例 2:

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

提示:

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

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

题解

这一题也是不难的,用中序遍历获得有序序列保存到list里,然后直接get(k - 1)即可。然后一个优化时间的方案是当list里的元素数量大于k就不用再继续了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public int kthSmallest(TreeNode root, int k) {
// 中序遍历得到一个list然后直接获取即可
List<Integer> list = new ArrayList<>();
dfs(root, list, k);
return list.get(k - 1);
}

public void dfs(TreeNode root, List<Integer> list, int k) {
if (root == null) {
return;
}
if (list.size() > k) {
return;
}
dfs(root.left, list, k);
list.add(root.val);
dfs(root.right, list, k);
}
}

LeetCode-230-二叉搜索树中第k小的元素
https://excelius.xyz/leetcode-230-二叉搜索树中第k小的元素/
作者
Ther
发布于
2024年7月31日
许可协议