图解LeetCode——230. 二叉搜索树中第K小的元素

news2024/11/16 13:54:13

一、题目

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

二、示例

2.1> 示例 1:

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

2.2> 示例 2:

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

提示:

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

三、解题思路

根据题目描述,我们要在题目给定的二叉搜索树中寻找第K小的元素。那么题目中给出了非常关键的一个信息就是——二叉搜索树,那么这种二叉树具有如下的特征:

若它的左子树不空】则左子树上所有结点的值均小于它的根结点的值;
若它的右子树不空】则右子树上所有结点的值均大于它的根结点的值;

所以,我们可以采用中序遍历的方式,因为 中序遍历 + 二叉搜索树,最终输出的就是一个递增的元素集合。为了统计出当前元素是第K小的元素,我们需要创建一个全局的计数器count只有当count等于k之后,那么就表示我们已经找到了第K小的元素了

那么如果我们找到了第K小的元素了之后,如果让后续的遍历可以快速结束呢,我们还可以通过创建一个全局变量result,默认值为-1,当我们找到了第K小的元素之后,将该节点的值赋值给result,那么在后续的遍历过程中,如果我们发现result不等于-1了,则表示已经找到了第K小的元素了,那么直接返回即可

以上就是本题的解题思路,为了便于理解,我们以输入为root = [5,3,6,2,4,null,null,1], k = 3为例,寻找第3小的元素。具体操作请见下图所示:

四、代码实现

class Solution {
    int count = 0, result = -1;
    public int kthSmallest(TreeNode root, int k) {
        if (root == null || result != -1) return result;
        kthSmallest(root.left, k);
        if (++count == k) result = root.val;  
        kthSmallest(root.right, k);
        return result;
    }
}

今天的文章内容就这些了:

写作不易,笔者几个小时甚至数天完成的一篇文章,只愿换来您几秒钟的 点赞 & 分享 。

更多技术干货,欢迎大家关注公众号“爪哇缪斯” ~ \(^o^)/ ~ 「干货分享,每天更新」

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/611361.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库优化之常用的show variables、show status配置优化

文章目录 ⭐️ MySQL优化-配置优化1、show variables查看MySQL服务器配置参数1&#xff09;查看及调整系统配置变量值2&#xff09;查询缓存相关参数&#xff1a; 2、show status查看MySQL服务器运行状态值1&#xff09;调整max_connections&#xff1a;2&#xff09;调整back_…

chatgpt赋能python:Python可以烧录进硬件里吗?

Python可以烧录进硬件里吗&#xff1f; Python编程语言已经成为了越来越多的开发工程师的首选工具。这是一门易学易用的编程语言&#xff0c;以其灵活性、可读性和功能强大而受到广泛的青睐。因此&#xff0c;许多人都很自然地想知道这个问题&#xff1a;Python可以烧录进硬件…

公司大规模裁员的时间轴

正如我们常说的公司在大规模裁员之前是有很多征兆的&#xff0c;不是就拍怕脑袋决定的。 这次公司的裁员真的属于教科书级别的裁员&#xff0c;因此觉得记录下公司整个过程的时间轴是有意义的&#xff0c;希望能够给所有朋友有个参考。 也很想知道的是&#xff0c;如果是你&am…

react组件性能优化探索实践

React本身就非常关注性能&#xff0c;其提供的虚拟DOM搭配上Diff算法&#xff0c;实现对DOM操作最小粒度的改变也是非常的高效。然而其组件渲染机制&#xff0c;也决定了在对组件进行更新时还可以进行更细致的优化。 react组件渲染 react的组件渲染分为初始化渲染和更新渲染。…

PB12.5 获取ip与计算机名

/建立全局的结构s_wsadata //结构如下: //version unsignedinteger //highversion unsignedinteger //description[257] character //systemstatus[129] character //maxso…

MySQL基础知识每日总结(5)

regexp检查总是返回0(没有匹配)或者1(匹配) 一、CASE表达式 1.两种写法 ①简单case表达式 case sex when 1 then 男when 2 then 女else 其他 end②搜索case表达式 casewhen sex 1 then 男when sex 2 then 女else 其他 end以上两种写法结果相同&#xff0c;但是简单case表达…

SpringCloudAlibaba:服务注册与发现之Nacos学习

目录 一、服务注册与发现介绍 1、常见注册中心 2、服务注册与发现的基本流程是: 3、服务注册与发现的主要好处是: 二、Alibaba Nacos 介绍 三、Nacos基本使用 1.linux安装包方式单节点安装部署 1. jdk安装配置 2. nacos安装 2.Nacos集成SpringBoot实现服务注册与发现…

跨国企业的组网需求分析

【案例背景】 经济全球化的背景下&#xff0c;跨国企业如何解决数据远距离传输的问题&#xff0c;稳定、安全、快速地搭建企业内网&#xff0c;影响着业务的正常开展。 【客户需求】 这家跨国企业在国内外均有办事处&#xff0c;其中国内的办公人员需要访问位于国外的内部服务…

交直流系统潮流计算(含5种控制模式)matlab代码

目录 1主要内容 2 部分代码 3 程序结果 4 下载链接 1主要内容 该程序参考文献《交直流系统潮流计算及相互关联特性分析》&#xff0c;采用5种交直流潮流控制方式&#xff1a;1.定电流定电压 2.定电流定熄弧角 3.定功率定电压 4.定功率定熄弧角 5.定触发角定电流。以9节点系…

LNMP服务

目录 一、安装Nginx服务 1.编译安装nginx服务 2.添加nginx系统服务 二、安装Mysql服务 1.编译安装mysql服务 2.修改mysql配置文件 3.设置路径环境变量 4.初始化数据库 5.添加mysql系统服务 6.修改mysql 的登录密码 三、安装配置 PHP 解析环境 1.安装环境依赖包 2.编…

【论文阅读】Neuralangelo:高保真神经表面重建

【论文阅读】Neuralangelo&#xff1a;高保真神经表面重建 Abstract1. Introduction2. Related work3. Approach3.1.预备工作3.2.数值梯度计算3.3.渐进细节层次3.4.优化 4. Experiments4.1. DTU Benchmark4.2. Tanks and Temples4.3.细节水平4.4.消融 5. Conclusion paper proj…

(栈和队列) 1047. 删除字符串中的所有相邻重复项 ——【Leetcode每日一题】

❓1047. 删除字符串中的所有相邻重复项 难度&#xff1a;简单 给出由小写字母组成的字符串 S&#xff0c;重复项删除操作会选择两个相邻且相同的字母&#xff0c;并删除它们。 在 S 上反复执行重复项删除操作&#xff0c;直到无法继续删除。 在完成所有重复项删除操作后返回…

小波和小波变换(应试)

零基础小白共计花费2小时38分04秒完成对小波的“平地起高楼”学习。 记录所有学习过程。 一、大致浏览PPT 这个阶段跳着看&#xff0c;太难的跳过 1.总结知识点 共四个部分 1.小波介绍 2.小波变换 小波变换的定义连续小波变换的定义离散小波变换小波重构 3.哈尔小波变换 …

华为OD机试真题 Java 实现【相对开音节】【2022Q4 100分】,附详细解题思路

一、题目描述 相对开音节构成的结构为辅音元音&#xff08;aeiou&#xff09;辅音(r除外)e&#xff0c;常见的单词有life,time,woke,coke,joke,note,nose,communicate&#xff0c;use&#xff0c;gate&#xff0c;same&#xff0c;late等。 给定一个字符串&#xff0c;以空格…

【Python接口自动化】--深入了解HTTP接口基本组成和网页构建原理

目录 引言 1、HTTP简介 2、HTTP原理和网页基础 2.1、 HTTP基本原理 2.2、 HTTP请求过程 2.3、 网页构成 引言 Python接口自动化有着广泛的应用场景&#xff0c;但是在实际使用过程中&#xff0c;可能会出现一些问题。比如&#xff0c;你不知道HTTP接口的基本构成&#xff0…

【Python编程从入门到实践第一版】P2 字符串入门

字符串入门 字符串的表示方法字符串基本函数.title().upper().lower()合并字符串删除空白 字符串&#xff0c;是一种常用的数据类别&#xff0c;而其值&#xff0c;可以顾名思义&#xff0c;是由字符组成的一串&#xff0c;故称为字符串&#xff1b; 字符串的表示方法 单引号、…

Andriod开发 SimpleAdapter BaseAdapter

1.SimpleAdapter 上一篇博客介绍的ArrayAdapter只能接受数组作为数据源&#xff0c;一般用于显示一行文字&#xff0c;更复杂的内容的显示可以用SimpleAdapter来实现。 SimpleAdapter接受List<Map<String, Object>>作为数据源&#xff0c;每个Map对应一个item&am…

为什么Pitch+Deck是创业者必备技能

投资术语简介&#xff1a;Pitch vs Deck vs BP BP以PPT形式出现的阅读式商业计划书&#xff0c;旨在无人讲解的前提下&#xff0c;通过文字和图表阐述项目商业信息。Deck单纯为营销演讲或融资推介所准备&#xff0c;以极少量文字图标和图像的介绍来辅助演讲的幻灯片。Pitch创业…

Spring Security 6.x 系列【52】扩展篇之集成第三方登录组件JustAuth

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.1.0 本系列Spring Security 版本 6.1.0 源码地址:https://gitee.com/pearl-organization/study-spring-security-demo 文章目录 1. 简介2. 入门案例3. 流程分析3.1 申请授权3.2 登录4. Spring Security 整…

MySQL 避「坑」指南 —— 你能设置出正确的主键吗?

前言 主键&#xff0c;可以唯一标识表中的某一行&#xff08;记录&#xff09;。合理地设置主键&#xff0c;可以帮助我们准确、快速地找到所需要的数据记录。但是设置出正确的主键似乎并没有那么简单&#xff0c;请思考如下几个问题&#xff1a; 表中的业务字段可以用来做主…