【leetcode-树】二叉搜索树中第K小的元素
给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。
说明:
你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。
示例 1:
输入: root = [3,1,4,null,2], k = 1
3
/
1 4
2
输出: 1
示例 2:
输入: root = [5,3,6,2,4,null,null,1], k = 3
5
/
3 6
/
2 4
/
1
输出: 3
进阶:
如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k 小的值,你将如何优化 kthSmallest 函数?
思路:
二叉搜索树特点:二叉搜索树相信大家都知道它的特征是,左子树的任意结点值<根结点值<右子树结点值, 因此采用中序遍历可以得到一个有序列表; 题目只需要求第k小的只,那么直接遍历到第k个就可以停止遍历了。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int kthSmallest(TreeNode root, int k) {
List<Integer> res = new ArrayList<>();
centerSearch(res, root, k);
return res.get(k-1);
}
private void centerSearch(List<Integer> res, TreeNode root, int k) {
if(root==null || res.size()>=k) {
return;
}
centerSearch(res, root.left, k);
res.add(root.val);
centerSearch(res, root.right, k);
}
}
网友评论