题目:
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
分析:
二叉树的中序遍历就是从小到大排序的,因此可以将中序遍历的结点放在vector中,然后找第k小只需输出v[k-1]即可
class Solution {
public:
void Inorder(TreeNode* pRoot, vector<TreeNode*>& v)
{
if(pRoot==nullptr)
return;
Inorder(pRoot->left, v);
v.push_back(pRoot);
Inorder(pRoot->right, v);
}
TreeNode* KthNode(TreeNode* pRoot, int k)
{
if(pRoot==nullptr || k<=0)
return nullptr;
vector<TreeNode*> v;
Inorder(pRoot, v);//将中序遍历结点存在vector中
if(k>v.size())
return nullptr;
else
return v[k-1];
}
};