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

题目

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

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

思路(灵茶山)

中序遍历就是在从小到大遍历节点值,所以遍历到的第 k 个节点值就是答案。

答案用一个外部变量ans记录

前置递减操作符 --,它首先将 k 的值减少 1,然后再与 0 进行比较。

代码

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

    public int kthSmallest(TreeNode root, int k) {
        this.k = k;
        dfs(root);
        return res;
    }

    private void dfs(TreeNode root) {
        if (root == null) {
            return;
        }
        dfs(root.left);
        if (--k == 0) {
            res = root.val;
            return;
        }
        dfs(root.right);
    }

    public static void main(String[] args) {
        TreeNode n2 = new TreeNode(2);
        TreeNode n1 = new TreeNode(1, null, n2);
        TreeNode n4 = new TreeNode(4);
        TreeNode root = new TreeNode(3, n1, n4);
        o230 main = new o230();
        System.out.println(main.kthSmallest(root, 1));
    }
}
posted @ 2025-05-01 14:34  kuki'  阅读(44)  评论(0)    收藏  举报