Total Accepted: 35869
Total Submissions: 100057
Difficulty: Medium
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?
Hint:
- Try to utilize the property of a BST.
- What if you could modify the BST node's structure?
- The optimal runtime complexity is O(height of BST).
Credits:
Special thanks to @ts for adding this problem and creating all test cases.
Subscribe to see which companies asked this question
Show Similar Problems
Have you met this question in a real interview?
Yes
No
这道题要求找出一棵二叉搜索树的第K小的元素。关键在于利用BST的性质。BST的中根遍历序是一个有序的集合。因此中根遍历的第K个节点即为要求的数。
我的AC代码:
public class KthSmallestElementinaBST {
Integer r = null;
Integer idx = 0;
public int kthSmallest(TreeNode root, int k) {
idx = 0;
travel(root, k);
return r.intValue();
}
void travel(TreeNode root, int k ) {
if(root == null && r != null) return;
if(root.left != null) travel(root.left, k);;
if(++idx == k) r = root.val;
if(root.right != null) travel(root.right, k);
}
}
// Definition for a binary tree node.
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}