【LeetCode】230. Kth Smallest Element in a BST 二叉搜索树中第K小的元素(Medium)(JAVA)
题目地址: https://leetcode.com/problems/kth-smallest-element-in-a-bst/
题目描述:
Given a binary search tree, write a function kthSmallest to find the kth smallest element in it.
Example 1:
Input: root = [3,1,4,null,2], k = 1
3
/ \
1 4
\
2
Output: 1
Example 2:
Input: root = [5,3,6,2,4,null,null,1], k = 3
5
/ \
3 6
/ \
2 4
/
1
Output: 3
Follow up:
What if the BST is modified (insert/delete operations) often and you need to find the kth smallest frequently? How would you optimize the kthSmallest routine?
Constraints:
- The number of elements of the BST is between 1 to 10^4.
- You may assume k is always valid, 1 ≤ k ≤ BST’s total elements.
题目大意
给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。
说明:
你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。
进阶:
如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k 小的值,你将如何优化 kthSmallest 函数?
解题方法
- 二叉搜索树的先序遍历是一个升序序列
- 所以只要用先序遍历找到第 k 个结束遍历即可
class Solution {
int count = 0;
int res = 0;
public int kthSmallest(TreeNode root, int k) {
if (root == null || count >= k) return res;
kthSmallest(root.left, k);
count++;
if (count == k) res = root.val;
kthSmallest(root.right, k);
return res;
}
}
执行耗时:0 ms,击败了100.00% 的Java用户
内存消耗:38.3 MB,击败了78.60% 的Java用户