题意:输入一棵二叉查找树(bst)(即二叉有序树,左子树<根<右子树),输出第k个最小的元素,已知1<=k<=二叉树的总元素个数
思路:中序遍历得到元素的非递减排序,找出第k个元素即可
public int kthSmallest(TreeNode root, int k) {
int cur = 1;
Stack
st = new Stack<>();
TreeNode tp = root;
st.push(tp);
while(tp.left != null){
st.push(tp.left);
tp = tp.left; //the path to the smallest O(logn)
}
while(cur < k){
tp = st.pop();
if(tp.right != null){
tp = tp.right;
st.push(tp);
while(tp.left != null){
st.push(tp.left);
tp = tp.left; //the path to the smallest O(logn)
}
}
cur++;
}
return st.pop().val;
}