LeetCode热题100--230. 二叉搜索树中第 K 小的元素--中等

1. 题目

给定一个二叉搜索树的根节点 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

2. 题解

java 复制代码
/**
 * 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 {
    int res, k;
    void dfs(TreeNode root) {
        if (root == null) return;
        dfs(root.left);
        if (k == 0) return;
        if (--k == 0) res = root.val;
        dfs(root.right);
    }
    public int kthSmallest(TreeNode root, int k) {
        this.k = k;
        dfs(root);
        return res;
    }
}

3. 解析

出自:230. 二叉搜索树中第 K 小的元素(中序遍历,清晰图解)

  1. 1-4行:这是对TreeNode类的定义或者说结构体的定义。它是一棵二叉树,其中每个节点最多有两个子节点,一个左子节点和一个右子节点。如果没有提供值、左子节点或右子节点,它们将默认为null。

  2. 7-12行:这些代码定义了一个名为Solution的类,其中包含了一些与二叉树相关的方法。这段代码的主要功能是找到BST中第k小的元素。

  3. 14-20行:在dfs(root)方法中,我们使用深度优先搜索遍历来寻找第k小的元素。如果当前节点为null,则返回;否则,递归调用左子树和右子树的dfs函数。

  4. 21-24行:在执行这段代码之前,需要将实例变量res和k初始化。res用于存储第k小的元素,而k是我们想要找到的排名。

  5. 30-35行:定义了kthSmallest(TreeNode root, int k)函数。该函数接受根节点和要找的第k小的元素作为参数。它首先将实例变量res和k初始化为输入参数,然后调用dfs方法开始搜索并返回结果。

  6. 在这段代码中,我们使用了深度优先搜索(DFS)的方法来遍历二叉树。每次访问一个节点时,如果它是第k小的元素,那么就把它的值赋给res变量。这样,当所有的节点都被访问完毕后,res将保存我们要找的第k小的元素。

相关推荐
SZYSK28 分钟前
OpenHarmony 上读卡、推理和双屏刷新抢 CPU:核验机与消费机的调度差
物联网·算法·harmonyos·1024程序员节
Ivanqhz1 小时前
MoE + LLM 应用
数据库·人工智能·pytorch·python·深度学习·算法·1024程序员节
lpfasd1231 小时前
推荐算法进化史
算法·机器学习·推荐算法
Pniubi1 小时前
力扣543二叉树的直径(深度优先搜索法(递归))
算法·leetcode·职场和发展
.道阻且长.2 小时前
Linux基本开发工具:编译器gcc/g++
linux·运维·服务器·职场和发展
Yuzhiyuxia12 小时前
【AI Agent面试系列】AI Agent记忆机制知识点1
人工智能·面试·职场和发展
UIU11412 小时前
P1233 [ICPC 2001 Taejon R] 木棍加工
数据结构·c++·算法·动态规划
论文复现现场13 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
ZhengEnCi13 小时前
用 AI 写代码为什么拼到最后还是拼人:算力瓶颈与领域专家提示词的本质差异
算法·架构
秋天的怀念_David14 小时前
第二十一夜 · 数字黑洞与西西弗斯的惩罚
java·程序人生·算法