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:
Credits:
Special thanks to @ts for adding this problem and creating all test cases.
Subscribe to see which companies asked this question
Discuss
这道题要求找出一棵二叉搜索树的第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; } }