题目链接:二叉搜索树中第 K 小的元素

给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 小的元素(从 1 开始计数)。

方法一:中序遍历

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    int res;
    int k;
    void f(TreeNode* root) {
        if (root == nullptr) return ;
        f(root->left);
        if (k == 0) return ;
        if (--k == 0) res = root->val;
        f(root->right);
    }
    int kthSmallest(TreeNode* root, int k) {
        this->k = k;
        f(root);
        return res;
    }
};

标签: Medium, 二叉树, 中序遍历

添加新评论