leet-code/src/main/java/leetcode/editor/cn/KthSmallestElementInABst.java

88 lines
2.0 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。
//
//
//
// 示例 1
//
//
//输入root = [3,1,4,null,2], k = 1
//输出1
//
//
// 示例 2
//
//
//输入root = [5,3,6,2,4,null,null,1], k = 3
//输出3
//
//
//
//
//
//
// 提示:
//
//
// 树中的节点数为 n 。
// 1 <= k <= n <= 104
// 0 <= Node.val <= 104
//
//
//
//
// 进阶:如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k 小的值,你将如何优化算法?
// Related Topics 树 二分查找
// 👍 397 👎 0
package leetcode.editor.cn;
import com.code.leet.entiy.TreeNode;
import java.util.ArrayList;
import java.util.List;
//230:二叉搜索树中第K小的元素
public class KthSmallestElementInABst {
public static void main(String[] args) {
//测试代码
Solution solution = new KthSmallestElementInABst().new Solution();
}
//力扣代码
//leetcode submit region begin(Prohibit modification and deletion)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int kthSmallest(TreeNode root, int k) {
List<Integer> nums = getList(root, new ArrayList<>());
return nums.get(k - 1);
}
private List<Integer> getList(TreeNode root, List<Integer> list) {
if (root == null) {
return list;
}
getList(root.left, list);
list.add(root.val);
getList(root.right, list);
return list;
}
}
//leetcode submit region end(Prohibit modification and deletion)
}