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

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

lletcode 230. 二叉搜索树中第K小的元素,链接:https://leetcode.cn/problems/kth-smallest-element-in-a-bst
题目描述
给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。
解法一
直接dfs中序遍历,代码如下:

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:vector<int> res;int kthSmallest(TreeNode* root, int k) {dfs(root);return res[k - 1];}void dfs(TreeNode* root){if(!root)return;dfs(root->left);res.push_back(root->val);dfs(root->right);}
};

解法二

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int kthSmallest(TreeNode* root, int k) {int res = 0;if(root == nullptr || k < 1) {return -1;}int numOfLeftNodes = getNumOfNodes(root->left);int numOfRightNodes = getNumOfNodes(root->right);if (numOfLeftNodes == k - 1) {return root->val;} else if (numOfLeftNodes >= k) {return kthSmallest(root->left, k);} else {return kthSmallest(root->right, k - numOfLeftNodes - 1);}}private:int getNumOfNodes(TreeNode* root) {if (!root) {return 0;}return getNumOfNodes(root->left) + getNumOfNodes(root->right) + 1;}
};

相关文章:

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

lletcode 230. 二叉搜索树中第K小的元素&#xff0c;链接&#xff1a;https://leetcode.cn/problems/kth-smallest-element-in-a-bst 题目描述 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 个最小元素&#xff08;从 …...

医学大数据|文献阅读|有关“肠癌+机器学习”的研究记录

目录 1.机器学习算法识别结直肠癌中的免疫相关lncRNA signature 2.基于机器学习的糖酵解相关分子分类揭示了结直肠癌癌症患者预后、TME和免疫疗法的差异&#xff0c;2区7 3.整合深度学习-病理组学、放射组学和免疫评分预测结直肠癌肺转移患者术后结局 4.最新7.4分纯生信&am…...

Linux信号【systemV】

目录 前言 正文&#xff1a; 1消息队列 1.1什么是消息队列&#xff1f; 1.2消息队列的数据结构 1.3消息队列的相关接口 1.3.1创建 1.3.2释放 1.3.3发送 1.3.4接收 1.4消息队列补充 2.信号量 2.1什么是信号量 2.2互斥相关概念 2.3信号量的数据结构 2.4…...

node.js最准确历史版本下载

先进入官网:Node.js https://nodejs.org/en 嫌其他博客多可以到/release下载:Node.js,在blog后面加/release https://nodejs.org/en/blog/release/ 点击next翻页,同样的道理...

UE5 C++ 单播 多播代理 动态多播代理

一. 代理机制&#xff0c;代理也叫做委托&#xff0c;其作用就是提供一种消息机制。 发送方 &#xff0c;接收方 分别叫做 触发点和执行点。就是软件中的观察者模式的原理。 创建一个C Actor作为练习 二.单播代理 创建一个C Actor MyDeligateActor作为练习 在MyDeligateAc…...

前端学习、CSS

CSS可以嵌入到HTML中使用。 每个CSS语法包含两部分&#xff0c;选择器和应用的属性。 div用来声明针对页面上的哪些元素生效。 具体设置的属性以键值对形式表示&#xff0c;属性都在{}里&#xff0c;属性之间用;分割&#xff0c;键和值之间用:分割。 因为CSS的特殊命名风格…...

Flink基本原理 + WebUI说明 + 常见问题分析

Flink 概述 Flink 是一个用于进行大规模数据处理的开源框架&#xff0c;它提供了一个流式的数据处理 API&#xff0c;支持多种编程语言和运行时环境。Flink 的核心优点包括&#xff1a; 低延迟&#xff1a;Flink 可以在毫秒级的时间内处理数据&#xff0c;提供了低延迟的数据…...

3. 文档概述(Documentation Overview)

3. 文档概述&#xff08;Documentation Overview&#xff09; 本章节简要介绍一下Spring Boot参考文档。它包含本文档其它部分的链接。 本文档的最新版本可在 docs.spring.io/spring-boot/docs/current/reference/ 上获取。 3.1 第一步&#xff08;First Steps&#xff09; …...

【vue3 路由使用与讲解】vue-router : 简洁直观的全面介绍

# 核心内容介绍 路由跳转有两种方式&#xff1a; 声明式导航&#xff1a;<router-link :to"...">编程式导航&#xff1a;router.push(...) 或 router.replace(...) &#xff1b;两者的规则完全一致。 push(to: RouteLocationRaw): Promise<NavigationFailur…...

ubuntu创建账号和samba共享目录

新建用于登录Ubuntu图形界面的用户 sudo su #切换为root用户获取管理员权限用于新建用户 adduser username #新建用户&#xff08;例如用户名为username&#xff09; adduser username sudo #将用户添加到 sudo 组 新建只能用于命令行下登录的用户 sudo su #切换为root用户…...

李沐动手学习深度学习——3.6练习

本节直接实现了基于数学定义softmax运算的softmax函数。这可能会导致什么问题&#xff1f;提示&#xff1a;尝试计算exp(50)的大小。 可能存在超过计算机最大64位的存储&#xff0c;导致精度溢出&#xff0c;影响最终计算结果。 本节中的函数cross_entropy是根据交叉熵损失函数…...

机器学习_10、集成学习-Bagging(自举汇聚法)

Bagging&#xff08;自举汇聚法&#xff09; Bagging&#xff08;Bootstrap Aggregating&#xff0c;自举汇聚法&#xff09;是一种集成学习方法&#xff0c;由Leo Breiman于1996年提出。它旨在通过结合多个模型来提高单个预测模型的稳定性和准确性。Bagging方法特别适用于减少…...

【力扣hot100】刷题笔记Day20

前言 今天学习了一句话“自己如果不努力&#xff0c;屎都吃不上热乎的”&#xff0c;话糙理不糙&#xff0c;与君共勉 35. 搜索插入位置 - 力扣&#xff08;LeetCode&#xff09; 二分查找 class Solution:def searchInsert(self, nums: List[int], target: int) -> int:n…...

Redis 之八:Jdeis API 的使用(Java 操作 Redis)

Jedis API 使用 Jedis 是 Redis 官方推荐的 Java 客户端&#xff0c;它提供了一套丰富的 API 来操作 Redis 服务器。通过 Jedis API&#xff0c;开发者可以方便地在 Java 应用程序中执行 Redis 的命令来实现数据的增删查改以及各种复杂的数据结构操作。 以下是一些基本的 Jedis…...

Docker 应用入门

一、Docker产生的意义 1‘解决环境配置难题&#xff1a;在软件开发中最大的麻烦事之一&#xff0c;就是环境配置。为了跑我们的程序需要装各种插件&#xff0c;操作系统差异、不同的版本插件都可能对程序产生影响。于是只能说&#xff1a;程序在我电脑上跑是正常的。 2’解决资…...

朱维群将出席用碳不排碳碳中和顶层科技路线设计开发

演讲嘉宾&#xff1a;朱维群 演讲题目&#xff1a;“用碳不排碳”碳中和顶层科技路线设计开发 简介 姓名&#xff1a;朱维群 性别&#xff1a;男 出生日期&#xff1a;1961-09-09 职称&#xff1a;教授 1998年毕业于大连理工大学精细化工国家重点实验室精细化工专业&#x…...

linux如何查看磁盘占用情况

要查看Linux系统中磁盘的占用情况&#xff0c;可以使用一些命令来获取相关信息。以下是一些常用的命令&#xff1a; df命令&#xff1a; df命令用于显示文件系统的磁盘空间使用情况&#xff0c;包括磁盘分区的总空间、已用空间、可用空间等信息。 df -h使用 -h 参数可以以人类可…...

【C++庖丁解牛】类与对象

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 目录 1.面向过程和面向对象…...

在什么时候企业档案才会发生调整

档案在企业中通常会调整在以下几个时刻&#xff1a; 1. 入职时&#xff1a;员工入职时&#xff0c;企业会要求员工提供个人档案&#xff0c;包括身份证件、学历证明、工作经历等相关文件。 2. 离职时&#xff1a;员工离职时&#xff0c;企业会整理员工的离职档案&#xff0c;包…...

Linux或Windows下判断socket连接状态

前言 场景&#xff1a;客户端程序需要实时知道和服务器的连接状态。比较通用的做法应用层是采用心跳机制&#xff0c;每隔一端时间发送心跳能回复说明服务器正常。 实际应用场景中&#xff0c;服务端和客户端并不是一家厂商的&#xff0c;比如说笔者这种情况&#xff0c;服务端…...

OpenRecall安全审计指南:如何确保开源代码无后门

OpenRecall安全审计指南&#xff1a;如何确保开源代码无后门 【免费下载链接】openrecall OpenRecall is a fully open-source, privacy-first alternative to proprietary solutions like Microsofts Windows Recall. With OpenRecall, you can easily access your digital hi…...

TP4552B低功耗 5V 常开的锂电池充放电解决方案

概述 TP4552B 是一款集成线性充电管理、同步升压转换、电池电量指示和多种保护功能的单芯片电源管理 SOC&#xff0c;为锂电池的充放电提供完整的单芯片电源解决方案。 TP4552B 内部集成了线性充电管理模块、同步升压放电管理模块、电量检测与 LED 指示模块、保护模块。TP4552B…...

3分钟极速上手:网盘下载加速神器全功能使用指南

3分钟极速上手&#xff1a;网盘下载加速神器全功能使用指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 /…...

React 实现 AI 流式打字机对话:SSE 分包粘包处理 + 并发优化

核心功能说明 完全对标豆包官网&#xff0c;涵盖所有生产级必备功能&#xff0c;无任何冗余逻辑&#xff1a; SSE 标准流式解析&#xff1a;兼容所有主流大模型&#xff08;豆包、通义千问、ChatGPT&#xff09;&#xff0c;严格处理 TCP 分包/粘包&#xff0c;不丢字、不乱码。…...

Laravel缓存、队列、邮件、文件系统等服务的驱动配置

Laravel核心服务通过驱动机制实现可插拔扩展&#xff0c;缓存、队列、邮件、文件系统均需在config文件和.env中配置对应驱动及参数。在 Laravel 应用中&#xff0c;缓存、队列、邮件和文件系统等核心服务均通过驱动&#xff08;Driver&#xff09;机制实现可插拔式扩展。每个服…...

Ubuntu服务器一键部署Qwen3-ASR-0.6B:高可用语音识别服务搭建

Ubuntu服务器一键部署Qwen3-ASR-0.6B&#xff1a;高可用语音识别服务搭建 语音识别技术正在从实验室走向生产环境&#xff0c;成为许多应用不可或缺的一部分。想象一下&#xff0c;你需要为客服系统、会议记录工具或者智能设备添加“听懂人话”的能力&#xff0c;自己从零开始…...

如何快速恢复损坏视频:开源修复工具UNTRUNC的完整指南

如何快速恢复损坏视频&#xff1a;开源修复工具UNTRUNC的完整指南 【免费下载链接】untrunc Restore a damaged (truncated) mp4, m4v, mov, 3gp video. Provided you have a similar not broken video. 项目地址: https://gitcode.com/gh_mirrors/unt/untrunc 你是否曾…...

终极免费学术论文获取指南:如何用Unpaywall一键解锁付费墙

终极免费学术论文获取指南&#xff1a;如何用Unpaywall一键解锁付费墙 【免费下载链接】unpaywall-extension Firefox/Chrome extension that gives you a link to a free PDF when you view scholarly articles 项目地址: https://gitcode.com/gh_mirrors/un/unpaywall-exte…...

深入理解 V8 引擎:C++ 与 JavaScript 的跨界传送门

在进行 Chromium 浏览器内核开发的日常中&#xff0c;我们经常需要追踪一段 JavaScript 代码是如何被浏览器执行的&#xff0c;或者一个扩展 API&#xff08;如 chrome.tabs.query 或 chrome.account.login&#xff09;是如何从 JS 穿透到 C 底层的。 当我们顺着 Blink 的 HTM…...

北京中建协认证中心:中国建筑业企业数字化研究报告 2026

这份《中国建筑业企业数字化研究报告&#xff08;2025&#xff09;》核心是以 “企业数字化 项目全生命周期数字化” 双主线为框架&#xff0c;系统梳理建筑业数字化转型的现状、路径、场景、风险与政策建议&#xff0c;核心总结如下&#xff1a;一、核心定位与双主线逻辑行业…...