题目描述
给定一棵二叉搜索树,请找出其中的第k小的结点。例如,(5,3,7,2,4,6,8)中,按结点数值大小顺序第三小结点的值为4。
- 解题思路
这题考察二叉搜索树的性质,即中序遍历是有序的。维护一个数组保存中序遍历的结果,答案就能得出来了。 - 注意点
一开始我漏了做一个检测,即k是否大于返回的中序遍历结果,导致有部分案例ac不了。
【考点】 树 中序遍历
class Solution {
public:
TreeNode* KthNode(TreeNode* pRoot, int k)
{
if(pRoot == nullptr || k < 1)
return nullptr;
vector<TreeNode*> vec;
InOrder(vec, pRoot);
if(k>vec.size())
return nullptr;
return vec[k-1];
}
void InOrder(vector<TreeNode*>& vec, TreeNode* pRoot){
if(pRoot == nullptr) return;
InOrder(vec, pRoot->left);
vec.push_back(pRoot);
InOrder(vec, pRoot->right);
return;
}
};