美文网首页二叉树
【剑指 offer】二叉搜索树的第k个结点。

【剑指 offer】二叉搜索树的第k个结点。

作者: 邓泽军_3679 | 来源:发表于2019-05-06 15:47 被阅读0次

    1、题目描述

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

    你可以假设树和k都存在,并且1≤k≤树的总结点数。

    样例

    输入:root = [2, 1, 3, null, null, null, null] ,k = 3
      2
     / \
    1  3
    输出:3

    2、问题描述:

    • 二叉搜索树的中序遍历是有序的。第k小就是进行中序遍历。

    3、问题关键:

    • 可以递归的实现,中序遍历,每次k --,直到找到k == 0;

    4、C++代码:

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        TreeNode* ans;
        TreeNode* kthNode(TreeNode* root, int k) {
            dfs(root, k);
            return ans;
        }
        void dfs(TreeNode* root, int &k) {
            if (!root) return;
            dfs(root->left, k);
            k --;
            if (k == 0) ans = root;
            dfs(root->right, k);
        }
    };
    

    相关文章

      网友评论

        本文标题:【剑指 offer】二叉搜索树的第k个结点。

        本文链接:https://www.haomeiwen.com/subject/atqdoqtx.html