题解 | #二叉搜索树的第k个节点#

二叉搜索树的第k个节点

https://www.nowcoder.com/practice/57aa0bab91884a10b5136ca2c087f8ff

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
public:
    int cnt = 0;
    TreeNode* res = nullptr;
    void mid_traverse(TreeNode* proot, int k) {
        if (proot == nullptr || cnt > k || k == 0) return;
        mid_traverse(proot->left, k);
        cnt++;
        if (cnt == k) res = proot;
        mid_traverse(proot->right, k);
    }
    int KthNode(TreeNode* proot, int k) {
        mid_traverse(proot, k);
        if (res) return res->val;
        return -1;
    }
};

class Solution {
public:
    vector<int> res;  // 借助数组下标
    int KthNode(TreeNode* pRoot, int k) {
        if (pRoot == nullptr || k == 0) return -1;
        KthNode(pRoot->left, k);
        res.push_back(pRoot->val);
        KthNode(pRoot->right, k);
        return k > res.size() ? -1 : res[k-1];
    }
};

2023-剑指-二叉树 文章被收录于专栏

2023-剑指-二叉树

全部评论

相关推荐

10-17 23:18
已编辑
西北农林科技大学 Web前端
独行m:给25可以试试,但他只能给12,那就是纯纯的事精
秋招,不懂就问
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务