#leetcode#Kth Smallest Element in a BST

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);}}

版权声明:本文为博主原创文章,未经博主允许不得转载。

痛苦留给的一切,请细加回味!苦难一经过去,苦难就变为甘美。

#leetcode#Kth Smallest Element in a BST

相关文章:

你感兴趣的文章:

标签云: