HOT44-二叉搜索树中第K小的元素

news2024/11/25 7:53:11

        leetcode原题链接:二叉搜索树中第K小的元素

题目描述

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

进阶:如果二叉搜索树经常被修改(插入/删除操作)并且你需要频繁地查找第 k 小的值,你将如何优化算法?

解题方法:一般涉及到二叉搜索树的题,一般都是用类似中(根)序遍历的方法来解决。我们在左->根->右遍历过程中,递归函数引入一个外部引用变量k,每次访问完root节点都将k减1,当减少为0的时候,此时访问的root节点即为第k小的元素。(在遍历的过程中更新结果,遍历完所有节点后即可获取最终更新的结果)

C++代码

/**
 * 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 result = 0;
        get_kth_inorder(root, k, result);
        return result;
    }

    void get_kth_inorder(TreeNode* root, int& k, int& result) { //这里k要用引用,需要记忆变化
        if (!root) {
            return;
        }
        get_kth_inorder(root->left, k, result); //访问左子树
        // 访问root节点
        k--;
        if (k == 0) {
            result = root->val;
            return;
        }
        get_kth_inorder(root->right, k, result); //访问右子树
    }
};

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

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

相关文章

U-Boot移植 (2)- LCD 驱动修改和网络驱动修改

文章目录 1. LCD 驱动修改1.1 修改c文件配置1.2 修改h文件配置1.3 编译测试 2. 网络驱动修改2.1 I.MX6U-ALPHA 开发板网络简介2.2 网络 PHY 地址修改2.3 删除 uboot 中 74LV595 的驱动代码2.4 添加开发板网络复位引脚驱动2.5 更新 PHY 的连接状态和速度2.6 烧写调试2.7 测试一下…

BERT模型蒸馏完全指南(原理技巧代码)

BERT模型蒸馏完全指南(原理/技巧/代码) 小朋友,关于模型蒸馏,你是否有很多问号: 蒸馏是什么?怎么蒸BERT?BERT蒸馏有什么技巧?如何调参?蒸馏代码怎么写?有现成的吗?今天rumor就结合Distilled BiLSTM/BERT-PKD/DistillBERT/TinyBERT/MobileBERT/MiniLM六大经典模型,…

vscode copilot长时间没反应

检测问题 首先看一下OUPUT插件信息有什么异常 如果没有异常&#xff0c;但是也没输出 那是请求没有相应的原因 可以在vscode里设置一下代理 参考&#xff1a;https://github.com/orgs/community/discussions/29127

Jenkins构建Python项目提示:‘python‘ 不是内部或外部命令,也不是可运行的程序

一、问题描述&#xff08;1&#xff09; 今天Darren洋在jenkins里构建与飞书机器人通知时&#xff0c;用python编写脚本时发现了以下报错&#xff1a;Jenkins构建Python项目提示&#xff1a;‘python‘ 不是内部或外部命令&#xff0c;也不是可运行的程序 二、解决办法 在配置…

Vue自定义指令及使用

一、什么是指令 学习 vue 的时候肯定会接触指令&#xff0c;那么什么是指令呢&#xff1f; 在 vue 中提供了一些对于页面和数据更为方便的输出&#xff0c;这些操作就叫做指令&#xff0c;以 v-xxx 表示&#xff0c;比如 html 页面中的属性<div v-xxx /div>比如在 angu…

二叉树 — 求二叉树最宽层节点数

题目&#xff1a; 题目如标题所示&#xff0c;如果二叉树如下图所示&#xff0c;则最宽层数节点数为2&#xff08;b&#xff0c;c层&#xff09;。 分析&#xff1a; 依然是前面文章中提到的按层遍历&#xff0c;不过这次在按层遍历的过程中&#xff0c;需要知道每层结束的节…

【STM32智能车】运行状态

【STM32智能车】运行状态 小车状态完整代码 智能车不应该只能前进后退吧&#xff0c;本篇来做其他的小车运行状态。 想想&#xff0c;一辆车有那些状态呢&#xff1f;前进&#xff0c;后退&#xff0c;左转&#xff0c;右转&#xff0c;停止。之前定义了直行。 def go(speed):…

Matlab|改进的粒子群算法优化支持向量机(回归拟合)

作者在前面的文章中介绍了粒子群算法的原理及其2种改进算法&#xff0c;本文将基于这三种优化方法&#xff0c;应用于支持向量机进行预测&#xff0c;并对比改进算法与标准粒子群算法的预测性能&#xff0c;结果显示改进后的方法能够得到更佳的预测效果。 00 文章目录 1 支持…

Jenkins持续集成,在Linux中安装最新版Jenkins(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 去年从6月28日发布…

【计算机视觉 | 图像分割】arxiv 计算机视觉关于图像分割的学术速递(7 月 3 日论文合集)

文章目录 一、分割|语义相关(4篇)1.1 SPAE: Semantic Pyramid AutoEncoder for Multimodal Generation with Frozen LLMs1.2 Achieving RGB-D level Segmentation Performance from a Single ToF Camera1.3 Topological Data Analysis Guided Segment Anything Model Prompt Op…

C++笔记之各种sleep方法总结

C笔记之sleep总结 —— 2023年4月9日 小问 上海 code review 文章目录 C笔记之sleep总结1.std::this\_thread::sleep\_for()附&#xff1a;std::this\_thread::sleep\_for(std::chrono::duration) 2.std::this\_thread::sleep\_until()附&#xff1a;std::this\_thread::sleep\…

c# 与单片机之间 float与byte的相互转化

该章作为 串口调试助手及结构体的收发的补充,主要用于自定义协议中的负数,浮点数等的收发(我们以前用的浮点数等,是直接使用的字符串的收发,从字符串中进行解析的,这里主要使用十六进制,对其收发原理及使用操作进行剖析)。 虚拟串口调试助手 一般来说,电脑的外部设备…

杂记 | 使用keycloak实现SSO单点登录(新手向,概念、原理、逻辑、详细步骤、难点解释)

文章目录 01 单点登录的概念02 keycloak的中的相关概念2.1 概念之间的关系2.2 案例说明 03 如何使用keycloak实现单点登录3.1 步骤与效果说明3.2 环境说明 04 操作步骤4.1 在服务器上创建并启动keycloak服务4.2 创建一个领域4.3 创建一个客户端4.4 获取客户端适配器配置4.5 创建…

C. Logo Turtle (DP,思维)

传送门 题意&#xff1a; 给一个含有T、F的字符串&#xff0c;T表示转向&#xff0c;F表示前进1格。现在可以把其中的T改为F&#xff0c;或F改为T&#xff0c;改变n次&#xff08;可重复改变某一位置的字母&#xff09;&#xff0c;问相对于起点最远能走多远。 思路&#xff…

quilt data 安装 数据包 框架

安装 Quilt 有两个用户可见的组件&#xff1a; 一个 Python 客户端一个 Web 目录 Python 客户端 需要 Python 3.7 或更高版本。 $ pip install quilt3[pyarrow]Mental Model Quilt 数据包的思维模型 Quilt 将数据集表示为数据包。一个数据包是一个不可变的相关文件集合&a…

Redis的主从复制、哨兵、cluster集群

Redis 主从复制 主从复制&#xff0c;是指将一台Redis服务器的数据&#xff0c;复制到其他的Redis服务器。前者称为主节点(Master)&#xff0c;后者称为从节点(Slave)&#xff1b;数据的复制是单向的&#xff0c;只能由主节点到从节点。 默认情况下&#xff0c;每台Redis服务…

JAVA关于多线程的学习

1.创建线程的方法(这里不考虑继承Thread类) 通过实现Runnable接口的方式实现 public class MyRunnable implements Runnable{Overridepublic void run() {for (int i 0; i < 5; i) {System.out.println(Thread.currentThread().getName()"执行了....");}} }pub…

基于.Net Core微服务-第1章:说明及技术栈

微服务是一种架构模式&#xff0c;提倡将单一应用程序划分为一组小的服务&#xff0c;服务相互协调、互相配合&#xff0c;为用户提供最终价值。

vulnhub-ripper(易)

打靶练习Ripper&#xff0c;这是一个中低的靶场 0x00 部署0x01 信息收集&#xff1a;端口扫描、服务发现0x02路径扫描0x03 总结 0x00 部署 靶机&#xff1a;下载地址 宿主机&#xff1a;kali2021版本 0x01 信息收集&#xff1a;端口扫描、服务发现 sudo arp-scan -l #探测存…

【每日随笔】摩托车驾驶 ④ ( 德州增驾摩托车 D 本记录 | 考场位置 “ 德州市公安局交警支队直属四大队车辆管理所 “ )

文章目录 一、进入考场二、科目一三、科目二1、推车 ( 找准车辆停放位置 )2、上车前检查 ( 开始考试前准备 )3、科目二考试开始4、科目二路线要求5、坡起6、绕桩7、单边桥 四、科目三教学1、推车 ( 找准车辆停放位置 )2、上车前检查 ( 开始考试前准备 )3、科目三考试开始4、科目…