力扣Hot100-230二叉搜索树中第K小的元素

news2024/9/29 11:28:12

(一)题目

给定一个二叉搜索树的根节点 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 <= 10^4
  • 0 <= Node.val <= 10^4

(二)分析

二叉搜索树

具有如下性质:

结点的左子树只包含小于当前结点的数。

结点的右子树只包含大于当前结点的数。

所有左子树和右子树自身必须也是二叉搜索树。

二叉树的中序遍历即按照访问左子树——根结点——右子树的方式遍历二叉树;在访问其左子树和右子树时,我们也按照同样的方式遍历;直到遍历完整棵树。(二叉搜索树的中序遍历为一个递增序列

因此本题转化为对二叉树进行中序遍历,常见的遍历方式有:递归和迭代(使用栈)

方法一:递归

/**
 * 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:
void findk(TreeNode* root,int &t,int k,int& val){
    if(root==NULL|| val!=-1) return ;
    findk(root->left,t,k,val);
    t++;
    if(t==k){
        val=root->val;
        return ;
    }

    findk(root->right,t,k,val);

}
    int kthSmallest(TreeNode* root, int k) {
        int val=-1;
        int t=0;
        findk(root,t,k,val);
        return val;

    }
};

方法二:迭代(后进先出)

(1)当栈不为空时,判断栈顶元素top节点是否有左节点,或左节点已经被访问过

(2)有左孩子且左孩子没有被访问过,则将左孩子节点入栈,

(3)若是没有则访问该栈顶元素,并判断其是否有右孩子

(4)有右孩子则将右孩子放入栈尾

/**
 * 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) {
        stack<TreeNode*>list;
        int t=0;
        
      map<TreeNode*,int>haved;
        TreeNode* p=root;
          if(p!=NULL)list.push(p);
        while(!list.empty()){
            TreeNode* top=list.top();
            if(top->left!=NULL&& haved.find(top->left)==haved.end() ){
                //左节点存在且未被访问
                list.push(top->left);
            }
            else{
                //访问当前top节点,并出栈
                haved[top]++;
                t++;
                if(t==k){
                    return top->val;
                }
                list.pop();
                //查看右节点,存在则入栈
                if(top->right!=NULL){
                    list.push(top->right);
                }

            }
        }
return 0;
    }
};

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

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

相关文章

人工智能系统测试的流程与生命周期

今天我们一起来看一下&#xff0c;人工智能系统究竟应该用什么样的流程和方法去进行测试呢&#xff1f; 首先我们一起来看一下&#xff0c;一个企业的人工智能产品部署和发布的一个流程&#xff0c;首先企业会从历史数据库中&#xff0c;利用数据去训练出一个初始的模型&#x…

【C++深度探索】红黑树实现Set与Map的封装

&#x1f525; 个人主页&#xff1a;大耳朵土土垚 &#x1f525; 所属专栏&#xff1a;C从入门至进阶 这里将会不定期更新有关C/C的内容&#xff0c;欢迎大家点赞&#xff0c;收藏&#xff0c;评论&#x1f973;&#x1f973;&#x1f389;&#x1f389;&#x1f389; 文章目录…

Comfyui线稿转绘工作流 一键掉进彩色世界

前言 在数字艺术的世界里&#xff0c;线稿转绘无疑是将创意从简单的线条变成生动图画的关键一步。而在众多工具中&#xff0c;ComfyUI的线稿转绘工作流以其便捷和高效&#xff0c;赢得了众多艺术家的青睐。 本文将详细介绍ComfyUI线稿转绘工作流的应用场景和优势&#xff0c;…

C语言典型例题29

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 习题2.6 设圆半径r1.5&#xff0c;圆柱高h3&#xff0c;求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。 scanf输入结果&#xff0c;输出计算结果&#xff0c;输出时要有文字说明&#xff0c;取小数点后两位数…

优质电器/机械岗位推荐:经验不限大厂直招,薪资最高30K!

本周优质电器/机械岗位推荐&#xff0c;涵盖C、自动化、开发、安卓开发、项目管理等岗位&#xff0c;经验不限&#xff0c;更有大厂直招岗位&#xff0c;薪资最高30K&#xff01;&#xff01; 抓紧投递&#xff0c;早投早入职&#xff01; &#x1f447;点击职位名称查看详情…

数据结构(java实现)——优先级队列,堆

文章目录 优先级队列堆堆的概念堆的模拟实现创建堆入堆判满删除判空获取栈顶元素 创建堆两种方式的时间复杂度堆排序java提供的PriorityQueue类基本的属性关于PriorityQueue类的三个构造方法关于PriorityQueue类中&#xff0c;入堆方法是怎样实现的&#xff1f;PriorityQueue注…

基于GA-PSO-SVM算法的混沌背景下微弱信号检测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 支持向量机&#xff08;SVM&#xff09; 4.2 GA-PSO-SVM算法 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) svm参数取值对检测性能的影响&#xff1a; SVM,PSO,…

华为Mate 60系列推送最新132版本有惊喜!你收到了吗?

华为Mate 60系列又悄悄搞事情&#xff0c;带了个大惊喜——手机获推HarmonyOS 4.2.0.132&#xff0c;一起来看看优化了什么&#xff1f; 首先更新的就是相机效果&#xff0c;从色彩精准度与拍照预览一致性上更加精益求精&#xff0c;上大分&#xff01; 色彩呈现更准确&#x…

基于Java中的SSM框架实现校园图书在线阅读系统项目【项目源码+论文说明】

基于Java中的SSM框架实现校园图书在线阅读系统演示 摘要 随着计算机的广泛应用和推广&#xff0c;越来越多的传统人工管理模式逐渐被线上化平台系统所替代&#xff0c;高校作为知识的学府在计算机的应用上非常广泛&#xff0c;同时随着近年来高校信息化建设的不断提升&#xf…

PDF编辑不求人!这三款免费版编辑器助你轻松搞定!

作为一名办公室文员&#xff0c;每天和PDF文件打交道那是家常便饭。打印合同、整理报告、编辑资料&#xff0c;PDF文件简直就是我的工作小伙伴。不过&#xff0c;说起编辑PDF&#xff0c;那可真是个技术活。以前&#xff0c;我总是为这事儿头疼&#xff0c;直到遇见了几款pdf编…

JVM知识总结(内存结构)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 内存模型 内存结构 堆&#xff1a; 存放对象实例, 几乎所有的对象…

Candance Allegro 入门教程笔记:如何绘制原理图和原理图库?

文章目录 一、用 Capture CIS 17.4 绘制原理图库 一、用 Capture CIS 17.4 绘制原理图库 1、安装完Candance Allegro 17.4后&#xff0c;我们所需的原理图工具以及PCB工具如下图所示&#xff1a;【Capture CIS 17.4】和【PCB Editor 17.4】 2、打开原理图工具&#xff1a;Captu…

React性能之--如何避免组件重复渲染?

在react中&#xff0c;我们会发现存在组件会重复渲染&#xff0c;虽然说如果项目不大的话&#xff0c;这点影响不大&#xff0c;但是我们还是尽量避免组件渲染比较好&#xff0c;养成好习惯&#xff0c;尽可能让不管是大小项目&#xff0c;都让性能尽可能优化 。那我们如何避免…

Spring-创建bean

preInstantiateSingletons v1.0 preInstantiateSingletons tips&#xff1a;最终调用getBean使用的是RootBeanDefinition进行构建的 public void preInstantiateSingletons() throws BeansException {if (logger.isTraceEnabled()) {logger.trace("Pre-instantiating sin…

圣诞节星星飘落的效果(微信小程序版)

圣诞节快到啦&#xff5e;&#x1f384;&#x1f384;&#x1f384;&#x1f384;咱们也试着做做小程序版本的星星✨飘落效果吧 在微信小程序内如何实现雪花飘落&#xff0c;星星飘落的效果呢&#xff5e; 先来个效果图&#xff1a; 1576672109245.gif 一步一步来&#xff1a;…

【稳定ACM出版、EI检索|武汉场线上线下结合】2024年第五届医学人工智能国际学术会议(ISAIMS 2024,8月13-17)

第五届医学人工智能国际学术会议&#xff08;ISAIMS2024&#xff09;将于2024年8月13-17日于荷兰阿姆斯特丹自由大学召开&#xff0c;国内分会场将于2024年10月25-27日于中国武汉召开。 本届会议将继续围绕人工智能在医学领域的最新研究成果&#xff0c;为来自国内外高等院校、…

智能化的Facebook未来:AI如何重塑社交网络的面貌?

随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;社交网络的面貌正在经历深刻的变革。Facebook&#xff08;现Meta Platforms&#xff09;作为全球最大的社交媒体平台之一&#xff0c;正积极探索如何利用AI技术来提升用户体验、优化内容管理并推动平台创新。…

全红婵夺冠后答记者问,太风趣了

8月6日晚&#xff0c;在巴黎结束的跳水女子10米台比赛中&#xff0c;17岁的中国选手全红婵以425.60分的高分成功卫冕&#xff0c;帮助中国代表团获得第22枚金牌。赛后采访时有记者想煽情&#xff0c;故意问到全红婵的哥哥来现场为她加油&#xff0c;结果小女子竟然毫无表情地回…

【python】Pandas处理Excel表格用法分析与最佳实践

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

AI大模型03:Function Calling

接口Interface &#xff08;1&#xff09;人际交互接口 UI &#xff08;User Interface&#xff09; &#xff08;2&#xff09;应用程序编程接口 API &#xff08;Application Programming Interface&#xff09; 接口能通的关键&#xff1a;是两方都要遵守约定。 &#xff0…