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

示例 1:
image

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

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


中序遍历:第 k 个出栈的节点元素就是结果,以为这是一个二叉搜索树,中序遍历严格单调递增

class Solution {
    public int kthSmallest(TreeNode root, int k) {
        Deque<TreeNode> stack = new LinkedList<TreeNode>();
        while (root != null || !stack.isEmpty()) {
            while (root != null) {
                stack.push(root);
                root = root.left;
            }
            root = stack.pop();
            k--;
            if (k == 0) return root.val;
            root = root.right;
        }
        return Integer.MIN_VALUE;
    }
}

其他两种:记录子树的节点数、AVL 知道就行,手撕就放弃吧

posted on 2025-07-17 17:03  caoshikui  阅读(4)  评论(0)    收藏  举报