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

相关推荐

offer多多的六边形战士很无语:看了你的博客,感觉挺不错的,可以把你的访问量和粉丝数在简历里提一下,闪光点(仅个人意见)
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务