当前位置: 首页 > news >正文

leetcode hot100【LeetCode 230. 二叉搜索树中第K小的元素】java实现

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

题目描述

给定一个二叉搜索树的根节点 root,和一个整数 k,请你找出其中第 k 小的节点。

注意:

  • 题目保证 k 的有效性。

示例:

给定二叉搜索树:

    5/ \3   7/ \   \
2   4   6

k = 2,返回值应该是 3(按升序排列,第二个最小的节点是 3)。

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 {public int kthSmallest(TreeNode root, int k) {// 使用一个列表来存储中序遍历的结果List<Integer> list = new ArrayList<>();inorderTraversal(root, list);// 返回第k小的元素return list.get(k - 1);}private void inorderTraversal(TreeNode node, List<Integer> list) {if (node == null)return;// 遍历左子树inorderTraversal(node.left, list);// 访问当前节点list.add(node.val);// 遍历右子树inorderTraversal(node.right, list);}
}

解题思路

由于二叉搜索树的性质,中序遍历的结果就是升序的。因此,我们可以通过中序遍历来获取所有节点的值,并将它们存储在一个列表中。然后,我们可以直接通过索引来获取第 k 小的元素。

复杂度分析

  • 时间复杂度:O(N),其中 N 是树中节点的数量。因为中序遍历需要访问每一个节点。
  • 空间复杂度:O(N),最坏情况下,我们需要存储所有的节点值。在最坏的情况下,树可能是一条链,此时中序遍历的结果就是所有的节点。

这个方法简单且有效,但需要注意,如果树非常大,可能会消耗较多的内存。对于更优的空间复杂度,可以考虑使用迭代的方式进行中序遍历,这样可以将空间复杂度降低到 O(H),其中 H 是树的高度。

相关文章:

leetcode hot100【LeetCode 230. 二叉搜索树中第K小的元素】java实现

LeetCode 230. 二叉搜索树中第K小的元素 题目描述 给定一个二叉搜索树的根节点 root&#xff0c;和一个整数 k&#xff0c;请你找出其中第 k 小的节点。 注意&#xff1a; 题目保证 k 的有效性。 示例&#xff1a; 给定二叉搜索树&#xff1a; 5/ \3 7/ \ \ 2 4 …...

从0开始深度学习(23)——图像卷积

上节了解了卷积层的原理&#xff0c;本节以图像为例&#xff0c;介绍一下它的实际应用 1 互相关运算 严格来说&#xff0c;卷积层是个错误的叫法&#xff0c;因为它所表达的运算其实是互相关运算&#xff08;cross-correlation&#xff09;。 首先&#xff0c;我们暂时忽略通…...

编程小白如何成为大神

成为编程大神的过程需要时间、耐心和实践。以下是一些适合大学新生的入门攻略&#xff1a; 1. 确定学习目标 选择语言&#xff1a;选择一门编程语言作为起点&#xff0c;如 Python、Java 或 JavaScript。Python 是初学者的热门选择&#xff0c;因为其语法简洁易懂。设定目标&…...

JetCache启动循环依赖分析

问题呈现 项目性能优化&#xff0c;需要将本地内存&#xff08;JVM内存&#xff09;替换为本地Redis&#xff08;同一个Pod中的Container&#xff09;&#xff0c;降低JVM内存和GC的压力&#xff0c;同时引入了JetCache简化和统一使用&#xff08;对JetCache也做了扩展&#x…...

【科研绘图】3DMAX管状图表生成插件TubeChart使用方法

3DMAX管状图表生成插件TubeChart&#xff0c;一款用于制作3D管状图表的工具。可以自定义切片的数量以及随机或指定切片颜色。 【版本要求】 3dMax 2008及更高版本 【安装方法】 TubeChart插件无需安装&#xff0c;使用时直接拖动插件脚本文件到3dMax视口中打开即可&#xff0…...

基于SSM土家风景文化管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;景点分类管理&#xff0c;热门景点管理&#xff0c;门票订单管理&#xff0c;旅游线路管理&#xff0c;系统管理 前提账号功能包括&#xff1a;系统首页&#xff0c;个人中心&…...

C++超强图片预览器

下载 文件打开关联 关键代码 uint32_t getSrcPx3(const cv::Mat& srcImg, int srcX, int srcY, int mainX, int mainY) const {cv::Vec3b srcPx = srcImg.at<cv::Vec3b>(srcY, srcX);intUnion ret = 255;if (curPar.zoomCur < curPar.ZOOM_BASE && src…...

网络搜索引擎Shodan(2)

声明&#xff1a;学习视频来自b站up主 泷羽sec&#xff0c;如涉及侵权马上删除文章 声明&#xff1a;本文主要用作技术分享&#xff0c;所有内容仅供参考。任何使用或依赖于本文信息所造成的法律后果均与本人无关。请读者自行判断风险&#xff0c;并遵循相关法律法规。 感谢泷…...

【Tableau】

Tableau 是一款强大且广泛使用的数据可视化和商业智能&#xff08;BI&#xff09;工具&#xff0c;用于帮助用户分析、探索和呈现数据。它通过直观的拖放界面&#xff0c;允许用户轻松创建动态仪表板和报告&#xff0c;而无需编写代码。Tableau 可处理多种数据源&#xff0c;如…...

分类与有序回归

分类问题 分类问题&#xff0c;例如分类猫、狗、猪时&#xff0c;使用数字进行表示为1&#xff0c;2&#xff0c;3。而1、2、3之间有大小&#xff0c;分类算法为了平衡标签之间的差异&#xff0c;使得损失公平&#xff0c;会使用one-hot编码。例如&#xff0c;分别使用&#x…...

Mac如何实现高效且干净的卸载应用程序

使用Mac卸载应用程序&#xff0c;你还在使用废纸篓这个办法吗&#xff0c;看不见卸载了什么&#xff0c;看不见清理了多少&#xff0c;真的不会有残留吗 XApp Mac上的卸载专家&#xff0c;强大的垃圾逻辑检测&#xff0c;垃圾扫描更全面&#xff0c;卸载更干净 使用简单&#…...

LaTex中的常用空格命令

【LaTex中的常用空格命令】 在 LaTeX 中&#xff0c;有几个常用的空格指令&#xff1a; ● \,&#xff1a;一个小空格&#xff0c;通常用于在数学公式中插入较小的间距。● \quad&#xff1a;一个等宽空格&#xff0c;相当于当前字体尺寸下的字符宽度。 ● \qquad&#xff1a;两…...

k8s 1.28.2 集群部署 Thanos 对接 MinIO 实现 Prometheus 数据长期存储

文章目录 [toc]什么是 ThanosThanos 的主要功能Thanos 的架构组件Thanos 部署架构SidecarReceive架构选择 开始部署部署架构创建 namespacenode-exporter 部署kube-state-metrics 部署Prometheus Thanos-Sidecar 部署固定节点创建 label生成 secretMinIO 配置etcd 证书 启动 P…...

域渗透AD渗透攻击利用 python脚本攻击之IPC连接 以及 python生成exe可执行程序讲解方式方法

Python脚本批量检测ipc连接 import os, timeips [192.168.1.121,192.168.1.8 ] users {administrator,hack,hack1,test, } passs {123qq.com,456qq.com,Admin12345 } for ip in ips:for user in users:for mima in passs:exec1 "net use \\" "\\" i…...

行为设计模式 -命令模式- JAVA

命令模式 一.简介二. 案例2.1 接收者&#xff08;Receiver&#xff09;2.2 命令接口实现对象&#xff08;ConcreteCommand&#xff09;2.3 调用者&#xff08; invoker&#xff09;2.4 获取Receiver对象2. 5 装配者客户端测试 三. 结论3.1 要点3.2 示例 前言 本设计模式专栏写了…...

使用redis实现发布订阅功能及问题

如何使用redis实现发布订阅及遇到的问题 使用背景&#xff1a; 服务A通过接口操作服务B&#xff0c;实现相应逻辑。生产环境上&#xff0c;服务A有两个pod&#xff0c;服务B有3个pod 通过接口调用时&#xff0c;请求只能打到服务B的一个pod上&#xff0c;而我们想要的是服务B的…...

Debug日程工作经验总结日程常用

数据库 db连接命令 kubectl exec -it -n de dbs-53-cdf57d8dd-l4l29 sh su - postgres psql psql -h 10.115.19.118 -p 12080 -U postgres -d clouddb SET search_path TO “h.com”; select * from ems_ice limit 1; 也可以不切换schema&#xff0c;直接sql查询 select * f…...

Apache Paimon主键表的一些最佳实践

今天我们说说Paimon主键表的一些使用上的注意事项。 一、主键表 主键表是Paimon的一种表类型。用户可以插入、更新或删除表中的记录。 说的直白点就是&#xff0c;允许你设置唯一主键&#xff0c;然后覆盖更新。 Bucket选择 无论分区表还是未分区表&#xff0c;Bucket都是最小的…...

React面试常见题目(基础-进阶)

React面试常见题目及详细回答讲解 基础题目&#xff08;20个&#xff09; 什么是React&#xff1f; 回答&#xff1a;React是一个用于构建用户界面的JavaScript库&#xff0c;它允许你将UI拆分成可复用的组件。React起源于Facebook的内部项目&#xff0c;用于构建高性能的Web应…...

AI赋能:开启你的副业创业之路

随着人工智能&#xff08;AI&#xff09;技术的迅猛发展&#xff0c;越来越多的人开始探索与之相关的副业机会。AI不仅深刻改变了我们的工作和生活方式&#xff0c;还为愿意学习和运用这项技术的人们打开了丰富的创业和增收之门。今天&#xff0c;我们就来盘点几条与AI相关的副…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

【笔记】WSL 中 Rust 安装与测试完整记录

#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统&#xff1a;Ubuntu 24.04 LTS (WSL2)架构&#xff1a;x86_64 (GNU/Linux)Rust 版本&#xff1a;rustc 1.87.0 (2025-05-09)Cargo 版本&#xff1a;cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...