一、题目
二、思路
1、返回二叉树中符合要求的节点
- 先序遍历,添加值到vector容器中,用STL中partial_sort函数排序,把前k个小的元素放前k位,然后得出*(res.begin()+k-1)为所找的值;再进行一遍前序遍历,找到与这个相等的值就返回
2、新建一个节点,这个节点的值为符合要求的值,返回这个节点
- 先序遍历,添加值到vector容器中,用STL中partial_sort函数排序,把前k个小的元素放前k位,然后得出*(res.begin()+k-1)为所找的值;新建一个节点,返回这个节点
三、代码
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};
*/
class Solution {
public:
vector<int>res;
TreeNode* KthNode(TreeNode* pRoot, int k) {
if(pRoot==nullptr || k==0)
{
return nullptr;
}
search(pRoot);
if(k>res.size())
{
return nullptr;
}
partial_sort(res.begin(),res.begin()+k,res.end());
//TreeNode *node=new TreeNode(*(res.begin()+k-1));
//return node;
int result=*(res.begin()+k-1);
return tree(pRoot,result);
}
void search(TreeNode* pRoot)
{
if(pRoot==nullptr)
{
return;
}
res.emplace_back(pRoot->val);
search(pRoot->left);
search(pRoot->right);
}
TreeNode *tree(TreeNode* pRoot,int result)
{
if(pRoot==nullptr)
{
return nullptr;
}
if(pRoot->val==result)
{
return pRoot;
}
else
{
TreeNode* p1=tree(pRoot->left,result);
if(p1!=nullptr)
{
return p1;
}
TreeNode* p2=tree(pRoot->right,result);
if(p2!=nullptr)
{
return p2;
}
}
return nullptr;
}
};