Given a binary search tree, write a functionkthSmallestto find thekth 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);}}
版权声明:本文为博主原创文章,未经博主允许不得转载。
痛苦留给的一切,请细加回味!苦难一经过去,苦难就变为甘美。