【练习】【二叉树】力扣热题100 230. 二叉搜索树中第 K 小的元素

题目

  1. 二叉搜索树中第 K 小的元素

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

示例 1:

输入:root = [3,1,4,null,2], k = 1

输出:1

示例 2:

输入:root = [5,3,6,2,4,null,null,1], k = 3

输出:3

来源:力扣热题100 230. 二叉搜索树中第 K 小的元素


思路(注意事项)

找第k小的元素,就是找升序排列中第k小的元素 -> 二叉搜索树的中序遍历是按元素升序排列。


纯代码

class Solution {
private:
    int ans, count = 0;
    void inorder(TreeNode* root, int k)
    {
        if (!root) return;
        inorder(root -> left, k);

        count ++;
        if (count == k) ans = root -> val;

        inorder(root -> right, k);
    }
public:
    int kthSmallest(TreeNode* root, int k) {
        inorder (root, k);
        return ans;
    }
};

题解(加注释)

class Solution {
private:
    int count = 0; // 用于记录当前遍历的节点个数
    int result = 0; // 用于存储第 k 小的元素

    // 中序遍历函数
    void inorder(TreeNode* root, int k) {
        if (!root) return; // 如果当前节点为空,直接返回

        // 递归遍历左子树
        inorder(root->left, k);

        // 处理当前节点
        count++; // 当前节点是第 count 小的节点
        if (count == k) {
            result = root->val; // 如果当前节点是第 k 小的节点,记录结果
            return; // 提前返回,避免不必要的遍历
        }

        // 递归遍历右子树
        inorder(root->right, k);
    }

public:
    int kthSmallest(TreeNode* root, int k) {
        inorder(root, k); // 开始中序遍历
        return result; // 返回第 k 小的元素
    }
};

你可能感兴趣的:(二叉树,输入输出,leetcode,算法,二叉树,c++)