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

news2024/9/29 13:14:57

题目

  1. 二叉搜索树中第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

解决思路

解决方法

方法一:

    //完全可以先放后取
    //而不是边取边放
    //代码好些 逻辑也容易理解
    fun kthSmallest2(root: TreeNode?, k: Int): Int {
        val linkedList = LinkedList<TreeNode>()
        var cur: TreeNode? = root
        var curIndex = 1
        while (!linkedList.isEmpty() || cur != null) {
            while (cur != null) {
                linkedList.push(cur)
                cur = cur.left
            }
            cur = linkedList.pop()
            if (curIndex++ == k) {
                return cur!!.`val`
            }
            //当前节点不满足 移出去
            cur = cur?.right
        }
        return -1
    }

方法二:
我自己手写的,逻辑不是很清晰
队列的push 和 pop 不太好

    public fun kthSmallest(root: TreeNode?, k: Int): Int {
        val linkedList = LinkedList<TreeNode>()
        var cur: TreeNode? = null
        if (root != null) {
            linkedList.add(root)
        }
        var curIndex = 1
        while (!linkedList.isEmpty()) {
            //当前cur为空 说明有一个新的根节点 需要遍历左孩子
            if (cur == null) {
                cur = linkedList.peek()
                while (cur?.left != null) {
                    linkedList.push(cur.left)
                    cur = cur.left
                }
            } else {
                cur = linkedList.peek()
            }

            if (curIndex++ == k) {
                return cur!!.`val`
            }
            //当前节点不满足 移出去
            linkedList.pop()

            //右边有孩子 那么需要遍历左孩子
            if (cur?.right != null) {
                linkedList.push(cur.right)
                cur = null
            }
        }
        return -1
    }

总结

按部就班就可以做好95%的工作 所以机器有时候比人做的更好 更快 不管是ETC 不管是围棋

大部分还都是平凡人

有的时候需要忘的差不多了才去些算法才能记忆深刻

做题频率确实低了很多

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

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

相关文章

练习四答案

练习2答案 构建数据库 数据库 数据表 answer开头表为对应题号答案形成的数据表 表结构 表数据 答案&#xff1a; 1、编写脚本&#xff0c;创建mis数据库&#xff0c;创建dept&#xff0c;创建employee表 SQL语句 CREATE TABLE dept ( …

HCIP——OSPF的重发布以及路由策略

OSPF重发布以及路由策略 一、重发布1、作用2、条件3、规则4、名词解释点向 5、单点重发布6、双点重发布 二、路由策略1、控制层流量和数据层流量2、抓流量ACL列表前缀列表 (ip-prefix) 3、做策略过滤策略(filter-policy)路由策略(route-policy) 一、重发布 在同一个网络拓扑结…

工欲善其事必先利其器,IT工作电脑更要维护好

目录 一&#xff1a;电脑的组成 二&#xff1a;维护措施 三&#xff1a;助力记忆 一&#xff1a;电脑的组成 当谈到电脑主机时&#xff0c;我们通常指的是电脑的中央处理器(CPU)、内存、主板、电源、硬盘、显卡、声卡、网卡等核心部件组成的整体。这些部件共同协作&#xff…

CSS 高频按钮样式

矩形与圆角按钮 正常而言&#xff0c;我们遇到的按钮就这两种 -- 矩形和圆角&#xff1a; 它们非常的简单&#xff0c;宽高和圆角和背景色。 <div classbtn rect>rect</div><div classbtn circle>circle</div>.btn {margin: 8px auto;flex-shrink: 0;…

率土抽卡助手 微信小程序开发

欢迎使用 微信率土抽卡助手 你好&#xff01;率土抽卡助手是包含全赛季土地难度表、开荒阵容、武将阵容、主城守军阵容推荐、内政、荣誉值计算、拆迁队、队伍克制、沃土坐标、鱼塘坐标、武将寻访技巧、行军外观判断队伍、T0阵容、战法拆解、卡包抽取等全功能小程序。可在微信游…

机器人状态估计:robot_localization 功能包简介与安装

机器人状态估计&#xff1a;robot_localization 功能包简介与参数配置 前言功能包简介安装使用ubuntu软件源安装使用源码安装 前言 移动机器人的状态估计需要用到很多传感器&#xff0c;因为对单一的传感器来讲&#xff0c;都存在各自的优缺点&#xff0c;所以需要一种多传感器…

Linux下CMake开发

CMake编译和运行C文件 编写CMakeLists.txt # 声明要求的 cmake 最低版本 cmake_minimum_required( VERSION 3.1 )# 声明一个 cmake 工程 project( pro )# 设置编译模式 set( CMAKE_BUILD_TYPE "Release" )#添加OPENCV库 #指定OpenCV版本&#xff0c;代码如下 #find…

vue2+wangEditor5富文本编辑器(图片视频自定义上传七牛云/服务器)

1、安装使用 安装 yarn add wangeditor/editor # 或者 npm install wangeditor/editor --save yarn add wangeditor/editor-for-vue # 或者 npm install wangeditor/editor-for-vue --save在main.js中引入样式 import wangeditor/editor/dist/css/style.css在使用编辑器的页…

压缩算法的原理丨基因型vcf文件为什么压缩后发生了什么?

压缩算法的本质 最近碰到一个神奇的现象&#xff0c;一份大小为16GB的xx.vcf.gz文件&#xff0c;解压之后体积变为600GB的vcf文件&#xff0c;为什么一份文件经过压缩后体积缩小了这么多&#xff1f; (work) [bio notes 21:29:40 ~/work/20230726/data]$ ls -lh总用量 620GB-…

mac m1安装Centos9

先看结果&#xff08;在mac M1 安装centos8 安装不成功的原因大部分是没有找到正确的系统&#xff09; 由于Cnetos8 停服&#xff0c;现有mac m1 上能够按照的Centos8 并非由官方发布&#xff0c;因此寻找官方发布的能够在mac m1上安装的centos版本。 在YouTuBe上找到一个视频…

华为产品测评官-开发者之声 +【小白的CodeArts产品体验(Devops实践)】

关于使用华为云Codearts产品中产品优点以及实践中出现的问题 一、Devops简介二、产品的优点1. 直观化的思维导图2. 迭代详情3. 合理的项目工作流程4. 合理的分支请求5. 可视化的代码问题统计图6. 报告的完整性7.流水线视图 三、实践中的小坑第一个小坑第二个小坑第三个小坑&…

点击按钮横向滚动左右滚动

展示 原理 隐藏超过部分&#xff0c;通过设置元素左侧的滚动距离&#xff0c;使元素向右向左滚动 1.scrollLeft&#xff1a;元素左侧已滚动的距离&#xff0c;即位于元素左边界与元素中当前可见内容的最左端之间的距离 2.scrollWidth:元素的整体宽度&#xff0c;包括由于溢出…

现代C++中的从头开始深度学习:激活函数

一、说明 让我们通过在C中实现激活函数来获得乐趣。人工神经网络是生物启发模型的一个例子。在人工神经网络中&#xff0c;称为神经元的处理单元被分组在计算层中&#xff0c;通常用于执行模式识别任务。 在这个模型中&#xff0c;我们通常更喜欢控制每一层的输出以服从一些约束…

详解python中的垃圾回收机制

目录 什么是垃圾回收机制 垃圾回收的工作流程 为什么要进行垃圾回收 详解python中的垃圾回收机制 总结 什么是垃圾回收机制 垃圾回收&#xff08;Garbage Collection&#xff09;是一种自动内存管理机制&#xff0c;用于检测和释放不再被程序使用的内存资源&#xff0c;以…

【数据结构】实验十一:图

实验十一 图 一、实验目的与要求 1&#xff09;掌握图的存储表示与操作实现。 2&#xff09;掌握图的连通性及其应用。 二、 实验内容 1.用邻接表存储一个图形结构&#xff0c;并计算每个顶点的度。 2. 采用深度和广度优先搜索算法&#xff0c;遍历上述这张图&#xff0c;…

CSS之允许点击穿透

一、pointer-events 属性用于设置元素是否对鼠标事件做出反应。 二、属性值 三、如果设置点击穿透效果&#xff0c;使用 pointer-events:none; 设置作用元素即可 .your-classname {pointer-events:none; }

23款奔驰S400豪华型升级后排电动腿托系统,提升后排乘坐舒适性

奔驰S400L后排座椅是不带腿托和脚托的&#xff0c;也没有一键躺平功能&#xff0c;相对于奔驰S级高配车型上配置的右边老板位座椅&#xff0c;舒适性就差强了一些。

AX88179A千兆网卡芯片,支持switch联网

AX88179是世界上第一个USB 3.0&#xff0c;千兆以太网控制器&#xff0c;它在单一芯片上集成了USB 3.0 PHY和10/100/1000Mbps千兆以太网MAC / PHY。AX88179是最新此外ASIX的USB-到-LAN产品组合&#xff0c;提供一个小的形式因素的解决方案和插头-和-打法可用性&#xff0c;使嵌…

重学C++系列之模板

一、什么模板 模板的引入跟泛型编程有关&#xff0c;泛型编程指编写和编译时&#xff0c;对于参数的类型是一个不确定的类型&#xff0c;直到程序运行时&#xff0c;才能确定真正的类型。而泛型编程的实现主要通过函数模板和类模板。 二、模板有几种 模板有两种&#xff0c;函…

无涯教程-jQuery - hide( )方法函数

如果显示了 hide()方法&#xff0c;它们只是隐藏每个匹配元素集。此方法还有另一种形式&#xff0c;可以控制动画的速度。 hide( ) - 语法 selector.hide( ); hide( ) - 示例 以下是一个简单的示例&#xff0c;简单说明了此方法的用法- <html><head><title…