剑指offer62_二叉搜索树的第k个结点_题解

二叉搜索树的第k个结点

题目描述

给定一棵二叉搜索树,请找出其中的第k小的TreeNode结点。

分析

方案一:递归

示例1

输入

{5,3,7,2,4,6,8},3

返回值

{4}

代码

/*
1.时间复杂度:O(n)
2.空间复杂度:O(n)
*/
class Solution
{
public:
    TreeNode *res = nullptr;
    void dfs(TreeNode *root, int &k)
    {
        if (!root)
        {
            return;
        }
        dfs(root->left, k);
        if (--k == 0)
        {
            res = root;
            return;
        }
        dfs(root->right, k);
    }
    TreeNode *KthNode(TreeNode *root, int k)
    {
        if (!root || k == 0)
        {
            return nullptr;
        }
        dfs(root, k);
        return res;
    }
};
posted @ 2021-02-28 20:30  RiverCold  阅读(83)  评论(0编辑  收藏  举报