Kth Smallest Element in a BST
public class Solution {
/**
* @param root: the given BST
* @param k: the given k
* @return: the kth smallest element in BST
*/
public int quickSelectOnTree(TreeNode root, int k,HashMap<TreeNode, Integer> size) {
if(root == null) {
return -1;
}
int left = 0;
if(root.left != null) {
left = size.get(root.left);
}
if(left == k - 1) {
return root.val;
}
if(left >= k) {
return quickSelectOnTree(root.left, k, size);
} else {
return quickSelectOnTree(root.right, k - 1 - left, size);
}
}
public int getSize(TreeNode root, HashMap<TreeNode, Integer> size) {
if(root == null) {
return 0;
}
int sum = 1;
sum += getSize(root.left, size);
sum += getSize(root.right, size);
size.put(root, sum);
return sum;
}
public int kthSmallest(TreeNode root, int k) {
// write your code here
HashMap<TreeNode, Integer> size = new HashMap<>();
getSize(root, size);
return quickSelectOnTree(root, k, size);
}
}
最后更新于
这有帮助吗?