题解 | #二叉搜索树的第k个结点#
二叉搜索树的第k个结点
http://www.nowcoder.com/practice/ef068f602dde4d28aab2b210e859150a
C++ 思路:
① 先中序存一下数据,目的是为了达到排序的效果;
② 找到第K小的之后,遍历找到该节点。
class Solution {
public:
//中序存一下数据,搜索树中序遍历可以得到单调递增的数据
void midTreeVal(vector<int> &vec, TreeNode* pRoot)
{
if(nullptr == pRoot)
return;
midTreeVal(vec, pRoot->left);
vec.push_back(pRoot->val);
midTreeVal(vec, pRoot->right);
}
//找到第K个节点
TreeNode* findTheNode(TreeNode* pRoot, int m,TreeNode* &ans)
{
if(nullptr == pRoot)
return nullptr;
findTheNode(pRoot->left,m,ans);
if(pRoot->val == m)
ans = pRoot;
findTheNode(pRoot->right,m,ans);
return pRoot;
}
TreeNode* KthNode(TreeNode* pRoot, int k) {
if(pRoot == nullptr || k == 0)
return nullptr;
TreeNode* ans = nullptr;
vector<int> vec;
midTreeVal(vec, pRoot);
findTheNode(pRoot, vec[k-1],ans);
return ans;
}
};
科大讯飞公司氛围 425人发布