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
这道题其实就是问的中序遍历,因为是BST,所以左节点一定小于根节点,那么我们只需要按照先左,再中后右的次序把二叉树里的值一个个输出放到arraylist中,最后返回那个K就可以
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
private void addNode(TreeNode root,ArrayList<Integer> res){
if(root==null){
return;
}
addNode(root.left,res);
res.add(root.val);
addNode(root.right,res);
}
public int kthSmallest(TreeNode root, int k) {
if(root==null){
return k;
}
ArrayList<Integer> res = new ArrayList<Integer>();
addNode(root,res);
return res.get(k-1);
}
}