#leetcode#Kth Smallest Element in a BST
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?
思路, in order traversal,
注意第一个元素的推断, 设root为当前节点, 则 root.left == null && count == 0,就保证了root为 1st smallest element。样例:
4
/
/
2
/
/
1
4
/
/
2
\
\
3
上面两个bst中第一个节点分别为 1 和 2
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public int kthSmallest(TreeNode root, int k) { List<Integer> count = new ArrayList<Integer>(); count.add(0); helper(root, count, k); return count.get(1); } private void helper(TreeNode root, List<Integer> count, int target){ if(root == null){ return; } helper(root.left, count, target); if(root.left == null && count.get(0) == 0){ count.set(0, 1); }else{ count.set(0, count.get(0) + 1); } if(count.get(0) == target){ count.add(root.val); return; } helper(root.right, count, target); } }