题目:
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. 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?
- Try to utilize the property of a BST.
- What if you could modify the BST node's structure?
题意: Follow up: Hint: 给一棵二叉排序树,然后求第K小的节点的值。首先要理解BST,二叉搜索树,就是指一棵树的左子树节点一定小于跟节点,右子树节点一定小于根节点。那么既然要求第K小的节点,那么就可以利用二叉搜索树的特征,考虑用中序遍历,就可以得到按照从小到大排列的数组,然后就是得到第K小的值。
- The optimal runtime complexity is O(height of BST).
<span style="font-size:14px;">public class Solution
{
List<Integer> list = new ArrayList<Integer>();
public int kthSmallest(TreeNode root,int k)
{
dfs(root);
//Collections.reverse(list);
System.out.println(list.size());
return list.get(k-1).intValue();
}
public void dfs(TreeNode root)
{
if(root == null)
return;
else //这里一定要来一个else
{
if(root.left != null)
dfs(root.left);
list.add(root.val);
if(root.right != null)
dfs(root.right);
}
}
}</span>