Given a binary search tree, write a function kthSmallest
to find the kth
smallest element in it.
Note:
You may assume k is always valid, 1 ≤ k ≤ BST's total elements.
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?
public class Solution230 {
public void traverse(TreeNode root, List<Integer> list) {
if(root == null) return;
traverse(root.left, list);
list.add(root.val);
traverse(root.right,list);
}
public int kthSmallest(TreeNode root, int k) {
int ans = 0;
List<Integer> list = new ArrayList<Integer>();
traverse(root,list);
ans = list.get(k-1);
return ans;
}
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
TreeNode root = new TreeNode(5);
root.left = new TreeNode(4);
root.right = new TreeNode(8);
root.left.left = new TreeNode(2);
root.left.left.right = new TreeNode(3);
root.right.left = new TreeNode(6);
Solution230 result = new Solution230();
}
}