描述:
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.Show More Hint
思路:
1.一般涉及到树的问题用树的遍历方式来解决的可能性比较大,或者就是递归了
2.对于本题,一种很朴素的解决方式就是不是二叉查找树么,中序遍历时不就是一个有序的序列么,直接上中序遍历,遍历到第K个数即是本题要求的Kth Smallest Element in a BST
代码:
public int kthSmallest(TreeNode root, int k) {
int count=0;
Stack<TreeNode>st=new Stack<TreeNode>();
st.push(root);
TreeNode top=null;
while(!st.empty())
{
top=st.peek();
while(top.left!=null)
{
st.push(top.left);
top=top.left;
}
while(top.right==null)
{
count++;
if(count==k)
return top.val;
st.pop();
if(!st.empty())
top=st.peek();
else
break;
}
if(!st.empty())
{
count++;
if(count==k)
return top.val;
st.pop();
st.push(top.right);
}
}
return -1;
}