//找到一个二叉查找树的第K小的个元素
//中序遍历二叉查找树,第K次访问的值就是整个二叉树的第K小的元素
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
int kthSmallest(TreeNode* root, int k) {
stack<TreeNode*> ms;
TreeNode *p = root,*q;
while(!ms.empty()||p){
if(p){
ms.push(p);
p=p->left;
}
else{
q = ms.top();
ms.pop();
k--;
if(k==0)
return q->val;
p=q->right;
}
}
}
//关键是掌握非递归的中序遍历的方法。