一.题目描述
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
二.代码(C++)
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
private:
vector<TreeNode*> res;
public:
TreeNode* KthNode(TreeNode* pRoot, int k)
{
res.clear();
if(!pRoot || k<=0)
return NULL;
find(pRoot);
if(k<=res.size())
return res[k-1];
return NULL;
}
void find(TreeNode* pRoot)
{
if(pRoot!=NULL)
{
find(pRoot->left);
res.push_back(pRoot);
find(pRoot->right);
}
return;
}
};
三.提交记录
四.备注
改为中序遍历,输出第k个元素。
或使用栈,压入最小的元素,每pop出一个元素,计数加一,计数到第k个。