题解 | #二叉搜索树的第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;
    }
};
全部评论

相关推荐

11-18 09:44
Java
小白也想要offer:简历别放洋屁,搞不还还放错了,当然你投外企除外,以上纯属个人观点
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务