二叉搜索树中第 K 小的元素-leetcode

题目描述

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

示例 1:

img

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

示例 2:

img

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

提示:

  • 树中的节点数为 n
  • 1 <= k <= n <= 104
  • 0 <= Node.val <= 104

解法一

思路:

递归

中序遍历查找第k个元素

代码:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    private int count = 0;
    private int ans=-1;
    public int dfs(TreeNode root,int k) {
        if(root==null) return count;
        if(dfs(root.left,k)>k) return count;
        count++;
        if(count==k){
            ans=root.val;
            return count;
        }
        if(dfs(root.right,k)>k) return count;
        return count;
    }


    public int kthSmallest(TreeNode root, int k) {
        count = 0;
        ans = 0;
        dfs(root,k);
        return ans;
    }
}
posted @ 2026-03-10 18:32  狐狸胡兔  阅读(1)  评论(0)    收藏  举报