题目:

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

提示:
树中的节点数为 n 。
1 <= k <= n <= 104
0 <= Node.val <= 104

题解:

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
# 中序遍历,就是从小到大开始遍历
class Solution:def kthSmallest(self, root: Optional[TreeNode], k: int) -> int:ans = 0def dfs(node:Optional[TreeNode]) -> None:nonlocal k,ansif node is None or k==0:return # 遍历左子树dfs(node.left)k-=1if k==0:ans = node.val# 遍历右子树dfs(node.right)dfs(root)return ans

思路

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

在中序遍历,即「左-根-右」的过程中,每次递归完左子树,就把 k 减少 1,表示我们按照中序遍历访问到了一个节点。如果减一后 k 变成 0,那么答案就是当前节点的值,用一个外部变量 ans 记录。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Seaborn数据可视化实战:Seaborn多变量图表绘制高级教程

Seaborn多变量图表实战&#xff1a;从数据到洞察 学习目标 本课程将带领学员深入了解Seaborn库中用于绘制多变量图表的高级功能&#xff0c;包括联合图&#xff08;Joint Plot&#xff09;、对角线图&#xff08;Pair Plot&#xff09;等。通过本课程的学习&#xff0c;学员将能…

【数智化人物展】首衡科技CTO李蒙:算法会过时,数据会贬值,只有系统智能才具未来性

李蒙本文由首衡科技CTO李蒙投递并参与由数智猿数据猿上海大数据联盟共同推出的《2025中国数智化转型升级先锋人物》榜单/奖项评选。大数据产业创新服务媒体——聚焦数据 改变商业“算法会过时&#xff0c;数据会贬值。”当我第一次在内部战略会上抛出这句话时&#xff0c;现场…

word——将其中一页变成横向

在word中如何将其中一页变成横向&#xff1f; 在需要横向的这一页和上一页插入分节符&#xff08;连续&#xff09; 1.点击布局→分隔符→分节符&#xff08;连续&#xff09; 2.在所需要横向页将纸张方向改为横向即可。

使用WORD实现论文格式的样式化制作【标题样式、自动序列、页号(分节)、自动目录(修改字体类型)】

背景 每家院校对论文的格式都有一系列的特定要求&#xff0c;相应的会有一份格式标准的说明文档&#xff0c;该说明文档中会罗列对文档各个项的格式标准要求&#xff08;例如&#xff1a;题目、1级标题、2级标题、页号、每个级别的字体字号&#xff0c;行距&#xff0c;段前段…

分享一个免费开源的网站跟踪分析工具Open-Web-Analytics(和GoogleAnalytics一样)

做独立网站的福音&#xff0c;这个是免费开源的&#xff0c;可增改性强。 开源地址&#xff1a;https://github.com/Open-Web-Analytics/Open-Web-Analytics 下载源码包 接着下载PHP工具&#xff1a;我用XP小皮 phpstudy_pro 地址&#xff1a;phpStudy - Windows 一键部署 …

Maxscript如何清理3dMax场景?

在3ds Max的创作过程中,随着项目的推进,场景往往会积累许多冗余元素,如孤立帮助对象、隐藏对象以及空层等,它们不仅让场景显得杂乱无章,还会占用资源、降低视口性能,影响工作效率。别担心,在本教程中,我们将为大家带来实用妙招——通过简单的Maxscript脚本片段,快速清…

JavaScript 性能优化实战:从分析到落地的全指南

一、引言&#xff1a;为什么 JS 性能优化至关重要&#xff1f;用户体验的直接影响&#xff1a;加载慢、交互卡顿如何流失用户&#xff08;引用 Google 研究&#xff1a;页面加载延迟 1 秒&#xff0c;转化率下降 7%&#xff09;业务价值关联&#xff1a;性能优化对 SEO、留存率…

线性回归学习笔记

一、线性回归简介1. 核心定义线性回归是一种通过属性的线性组合进行预测的线性模型&#xff0c;核心目标是找到一条直线&#xff08;二维&#xff09;、一个平面&#xff08;三维&#xff09;或更高维的超平面&#xff0c;使模型的预测值与真实值之间的误差最小化。2. 适用场景…

Kotlin 中适用集合数据的高阶函数(forEach、map、filter、groupBy、fold、sortedBy)

在 Kotlin 中,高级函数(Higher-Order Functions)是一个非常强大的特性。高级函数是指可以将函数作为参数传递,或者将函数作为返回值返回的函数。这种特性使得代码更加灵活和可复用。 使用高级函数可以方便地对集合进行操作,如 map、filter、reduce 等。 在事件驱动的编程中…

Redis 哈希表的核心——`dictEntry` 结构体

接上一篇 Redis 哈希表的本质&#xff1a;数组里存的是什么 Redis 哈希表的核心——dictEntry 结构体&#xff0c;是真正承载我们存储的键值对数据的那个结构。 它的定义非常简洁&#xff0c;但设计得很巧妙。以下是其 C 语言代码&#xff08;在 Redis 源码 src/dict.h 中&a…

Jsqlparser + Freemarker + Vue3 数据透视报表设计方案

1. 目标与前置条件目标&#xff1a;基于 JSQLParser FreeMarker Vue3 构建一套“可配置的数据透视报表”能力&#xff0c;实现从任意基础 SQL/视图出发&#xff0c;按维度/指标灵活聚合、筛选、排序、分页、导出&#xff0c;并支持钻取、联动、TopN、同比环比等常见分析操作。…

SpringBoot3 Ruoyi芋道管理后台vben5.0

新技术栈&#xff08;Vue3、Vite6、TypeScript、SpringBoot3/SpringCloud基于Vben5.0最新版本&#xff0c;全面采用Vue3 Vite6 Ant Design Vue TypeScript技术栈&#xff0c;并同时支持SpringBoot3单体架构与SpringCloud微服务架构前端技术栈&#xff1a;Vue3 Vite6 TS A…

K8S - NetworkPolicy的使用

1 前置条件2 控制范围3 隔离类型4 如何识别5 主要字段6 案例演示 前置条件 网络策略通过网络插件来实现。 要使用网络策略&#xff0c;你必须使用支持 NetworkPolicy 的网络解决方案。 创建一个 NetworkPolicy 资源对象而没有控制器来使它生效的话&#xff0c;是没有任何作用的…

Linux:TCP协议

TCP是一个面向连接的、可靠的、基于字节流的传输层协议。文次我们会通过介绍TCP的报头并通过分析各字段的用途来进一步解释其核心特性:可靠传输&#xff1a; 有确认应答、超时重传、确保有序。流量控制和拥塞控制&#xff1a; 动态调节发送速率&#xff0c;防止丢包与拥塞。面向…

uniapp使用map打包app后自定义气泡不显示解决方法customCallout

前言&#xff1a;使用uniapp开发后在小程序可以正常显示&#xff0c;但是运行打包成App后就不显示了&#xff0c;其实这一块对于uniapp框架开发来说&#xff0c;是有系统性的bug&#xff0c;如果你再开发时使用的是vue文件进行&#xff0c;就会出现这个问题。解决方法&#xff…

【typenum】 22 类型级别二进制对数运算(Logarithm2)

一、源码 这段代码实现了一个类型级别的二进制对数运算系统 定义&#xff08;type_operators.rs&#xff09; /// A **type operator** for taking the integer binary logarithm of Self. /// /// The integer binary logarighm of n is the largest integer m such /// that …

golang 非error错误分类

1.应用级别&#xff0c;可recover这些 panic 一般是 逻辑或使用不当导致的运行时错误&#xff0c;Go 程序可以用 recover 捕获并继续运行&#xff1a;类型示例描述类型不一致atomic.Value 存不同类型 v.Store(100); v.Store("abc")panic: store of inconsistently ty…

【Ansible】变量与敏感数据管理:Vault加密与Facts采集详解

1. 变量Ansible利用变量存储可重复使用的值&#xff0c;可以简化项目的创建和维护&#xff0c;减少错误数量。1.1 变量名称由字符串组成&#xff0c;必须以字母开头&#xff0c;并且只能含有字母、数字和下划线&#xff0c;和其它编程语言很类似。1.2 常见变量要创建的用户要安…

ROS2下YOLO+Moveit+PCL机械臂自主避障抓取方案

整体运行架构 1.运行相机取像节点 . ./install/setup.bash ros2 launch orbbec_camera gemini_330_series.launch.py depth_registration:true 2.运行根据图像x,y获取z的service 基本操作记录&#xff1a; 创建python包,在src目录下 ros2 pkg create test_python_topic --bu…

快速入门Vue3——初体验

目录 前言 一、搭建环境 1.1、安装Node.js 1.2、安装Vite 二、项目创建 三、运行项目 四、集成Pinia 4.1、Pinia介绍 4.2、Pinia安装 五、集成VueUse 5.1、vueuse简介 5.2、vueuse安装 六、集成Vant 6.1、Vant简介 6.2、Vant安装 前言 本专栏主要介绍如何使用…