您的位置:首页 > 其它

LeetCode---Kth Smallest Element in a BST

2015-11-03 10:41 197 查看
题目大意:给出一颗二叉搜索树,找出其中第K小的数。

算法思想:

由二叉搜索树和中序遍历的性质可知,中序遍历二叉搜索树的结果是从小到大递增的序列,从而只需找到中序遍历的过程中的第K个节点即可。

中序遍历算法:

对于任意节点P,只要P不空则将其入栈,并指向其左孩子节点,直至P为空,然后取栈顶顶元素并出栈,然后对其右子树做上述同样的操作。按此过程重复直到栈为空为止。

代码如下:

/**
* Definition for a binary tree node.
* struct TreeNode {
*     int val;
*     TreeNode *left;
*     TreeNode *right;
*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:

int kthSmallest(TreeNode* root, int k) {
int res=0,num=0;
if(root==NULL) return 0;
TreeNode* p=root;
stack<TreeNode*> S;
while(p!=NULL||!S.empty()){
while(p!=NULL){
S.push(p);
p=p->left;
}
if(!S.empty()){
p=S.top();
++num;
if(num==k) {
res=p->val;
break;
}
S.pop();
p=p->right;
}
}
return res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: