leetcode做题笔记173. 二叉搜索树迭代器

news2025/1/11 16:58:55

实现一个二叉搜索树迭代器类BSTIterator ,表示一个按中序遍历二叉搜索树(BST)的迭代器:

  • BSTIterator(TreeNode root) 初始化 BSTIterator 类的一个对象。BST 的根节点 root 会作为构造函数的一部分给出。指针应初始化为一个不存在于 BST 中的数字,且该数字小于 BST 中的任何元素。
  • boolean hasNext() 如果向指针右侧遍历存在数字,则返回 true ;否则返回 false 。
  • int next()将指针向右移动,然后返回指针处的数字。

注意,指针初始化为一个不存在于 BST 中的数字,所以对 next() 的首次调用将返回 BST 中的最小元素。

你可以假设 next() 调用总是有效的,也就是说,当调用 next() 时,BST 的中序遍历中至少存在一个下一个数字。

示例:

输入
["BSTIterator", "next", "next", "hasNext", "next", "hasNext", "next", "hasNext", "next", "hasNext"]
[[[7, 3, 15, null, null, 9, 20]], [], [], [], [], [], [], [], [], []]
输出
[null, 3, 7, true, 9, true, 15, true, 20, false]

解释
BSTIterator bSTIterator = new BSTIterator([7, 3, 15, null, null, 9, 20]);
bSTIterator.next();    // 返回 3
bSTIterator.next();    // 返回 7
bSTIterator.hasNext(); // 返回 True
bSTIterator.next();    // 返回 9
bSTIterator.hasNext(); // 返回 True
bSTIterator.next();    // 返回 15
bSTIterator.hasNext(); // 返回 True
bSTIterator.next();    // 返回 20
bSTIterator.hasNext(); // 返回 False

提示:

  • 树中节点的数目在范围 [1, 105] 内
  • 0 <= Node.val <= 106
  • 最多调用 105 次 hasNext 和 next 操作

进阶:

  • 你可以设计一个满足下述条件的解决方案吗?next() 和 hasNext() 操作均摊时间复杂度为 O(1) ,并使用 O(h) 内存。其中 h 是树的高度。

思路一:中序遍历

c++解法

class BSTIterator {
private:
	TreeNode* root;
	vector<int> t;
	int cnt;
public:
	BSTIterator(TreeNode* root) : root(root), cnt(0) {
		stack<TreeNode*> s;
		if (root == nullptr) return;
		while (root || !s.empty()) {
			while (root) {
				s.push(root);
				root = root->left;
			}
			if (!s.empty()) {
				root = s.top();
				s.pop();
				t.emplace_back(root->val);
				root = root->right;
			}
		}
	}

	int next() {
		return cnt < t.size() ? t[cnt++] : 0;
	}

	bool hasNext() {
		return cnt < t.size();
	}
};

分析:

本题可转换为求二叉树的中序遍历,利用栈来存储二叉树节点,先放入二叉树左子树,当左子树放完后再放入右子树,输出的时候根据栈中节点存放位置来输出,时间复杂度为O(n),空间复杂度为O(n)

总结:

本题考察对二叉树中序遍历的应用,利用栈来存储节点可使后面查找时的时间复杂度降低

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

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

相关文章

排序优化:如何实现一个通用的、高性能的排序函数?

文章来源于极客时间前google工程师−王争专栏。 几乎所有的编程语言都会提供排序函数&#xff0c;比如java中的Collections.sort()。在平时的开发中&#xff0c;我们都是直接使用&#xff0c;这些排序函数是如何实现的&#xff1f;底层都利用了哪种排序算法呢&#xff1f; 问题…

微信小程序入门---超详细教程

一&#xff0c;小程序入门 1.1 什么是小程序&#xff1f; 2017年度百度百科十大热词之一 微信小程序&#xff08;wei xin xiao cheng xu&#xff09;&#xff0c;简称小程序&#xff0c;英文名Mini Program&#xff0c;是一种不需要下载安装即可使用的应用( 张小龙对其的定义…

好的摄影师都会iPhone 8和iOS 11的这三项功能

众所周知&#xff0c;苹果的手机像素一直处于智能手机摄影的前沿&#xff0c;在即将到来的九月&#xff0c;苹果公司准备证明他拥有最好的相机技术。 虽然我们还不知道iPhone 8摄像头的具体细节&#xff0c;如几百万像素、光学变焦是多少&#xff0c;但我们确实知道苹果正在给i…

2023年全球团队协作工具排名推荐,这6款值得关注!

随着远程工作变得越来越普遍&#xff0c;团队协作工具在今天的工作场所变得越来越重要。然而&#xff0c;找到合适的协作工具来满足团队的需求可能是一个挑战。有这么多可用的选项&#xff0c;很难决定哪一个对您的团队最有效。 在本文中&#xff0c;我们将研究团队协作工具的不…

小程序的入门

目录 小程序的简介 好处 安装及使用 小程序的入门案列 小程序的简介 微信小程序是一种轻量级的应用程序&#xff0c;可以在微信平台上运行。它们具有快速、便捷和低成本等特点。通过微信小程序&#xff0c;用户可以在微信内直接使用各种功能&#xff0c;而无需下载和安装额外…

如何降低海康、大华等网络摄像头调用的高延迟问题(一):海康威视网络摄像头的python sdk使用(opencv读取sdk流)

目录 1.python sdk使用 1.海康SDK下载 2.opencv读取sdk流 先说效果&#xff0c;我是用的AI推理的实时流&#xff0c;延迟从高达7秒降到小于1秒 如果觉得这个延迟还不能接受&#xff0c;下一章&#xff0c;给大家介绍点上不得台面的小方法 SDK&#xff08;Software Developme…

“小程序:改变电商行业的新趋势“

目录 引言1. 小程序的简介1.1 什么是小程序&#xff1f;1.2 小程序的优势 2. 小程序之电商演示1.注册微信小程序2.安装开发工具3.创建项目 3. 小程序之入门案例总结 引言 随着移动互联网的迅猛发展&#xff0c;小程序作为一种全新的应用形态&#xff0c;正在逐渐改变着传统电商…

springboot 志同道合交友网站演示

springboot 志同道合交友网站演示 liu1113625581

SpringBoot面试题2:SpringBoot与SpringCloud 区别?SpringBoot和Spring、SpringMVC的区别

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:SpringBoot与SpringCloud 区别? Spring Boot 和 Spring Cloud 是 Spring 生态系统中的两个关键组件,它们有以下区别: 定位:Spring Boot 用于简…

<三>Qt斗地主游戏开发:主界面初始化显示

1. 主界面效果 效果关键点&#xff1a; 1&#xff09;拖动标题栏可实现主界面拖动 2&#xff09;logo图标名称及主界面背景 3&#xff09;最小化及关闭 2.思路分析 1&#xff09;背景图片及logo图标的设定比较简单&#xff0c;通过stylesheet即可实现。通过QWidget的拖动即可实…

Jboss反序列化漏洞

run.bat运行jboss 看下server.xml 端口设置的多少 打开jboss 用jboss反序列工具进行扫描 执行命令&#xff0c;因为存在jboss存在漏洞&#xff0c;所以执行命令得到结果 找一下jboss的目录 dir /s c:\*.jsp 先选一个jboss目录上传试一下 把斜杠改成反斜杠 给这个目录上传一个脚…

01背包问题 : 二维dp数组 + 图文

其实01背包问题&#xff0c;我之前跟着代码随想录的Carl学过&#xff0c;今天我看到另外一种定义dp数组的方式&#xff0c;我觉得思路也不错&#xff0c;所以我又来写一篇&#xff0c;大家再看此篇之后也可以看我的往期文章&#xff0c;非常感谢您的阅读&#xff1a;解决0-1背包…

「网络编程」网络层协议_ IP协议学习_及深入理解

「前言」文章内容是网络层的IP协议讲解。 「归属专栏」网络编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、IP协议简介二、IP协议报头三、IP网段划分&#xff08;子网划分&#xff09;四、特殊的IP地址五、IP地址的数量限制六、私有IP地址和公网IP地址七、路由八、分…

Unity实现摄像机向屏幕中间发射射线射击物体

1.创建一个准星放在屏幕中间 外部找个PNG透明图&#xff0c;拖到Unity文件夹&#xff0c;右上角改成精灵sprite2d 2.添加到UI画布 3.写脚本 首先&#xff0c;我们需要引入一些 "工具"&#xff0c;就像我们在玩游戏时要先下载游戏客户端一样。这里的 "工具&quo…

【Python】Python语言基础(中)

第十章 Python的数据类型 基本数据类型 数字 整数 整数就是整数 浮点数 在编程中&#xff0c;小数都称之为浮点数 浮点数的精度问题 print(0.1 0.2) --------------- 0.30000000000000004 ​​1.可以通过round()函数来控制小数点后位数 round(a b)&#xff0c;则表示…

华为云云耀云服务器L实例评测|华为云耀云服务器L实例启动宠物预约项目(九)

十、修改配置文件&#xff0c;启动宠物预约项目&#xff1a; 上面步骤进行了程序的安装&#xff0c;接下来就需要对相关程序的配置进行修改&#xff0c;如修改PHP-FPM的运行方式&#xff0c;增加nginx的配置文件&#xff0c;修改Laravel的配置文件。 1. 修改PHP-FPM的配置&…

【LeetCode: 136. 只出现一次的数字 | 位运算 - 异或】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

git强制删除本地分支 git branch -D

git强制删除本地分支 git branch -D git删除本地分支_zhangphil的博客-CSDN博客git branch -d <分支名>可以通过: git branch 查看所有本地分支及其名字&#xff0c;然后删除特定分支。https://blog.csdn.net/zhangphil/article/details/82255002 使用git branch -d删除…

网络工程师知识点3

41、各个路由协议&#xff0c;在华为设备中的优先级&#xff1f; 直连路由 0 OSPF 10 静态 60 42、OSPF&#xff1a;开放式最短路径优先路由协议&#xff0c;使用SPF算法发现和计算路由 OSPF的优点&#xff1a; 1、收敛速度快&#xff0c;无路由自环&#xff0c;适用于大型网络…

Arduino驱动BNO055 10轴绝对定向传感器(惯性测量传感器篇)

目录 1、传感器特性 2、控制器和传感器连线图 3、驱动程序 BNO055是实现智能9轴绝对定向的新型传感器IC,它将整个传感器系统级封装在一起,集成了三轴14位加速度计,三轴16位陀螺仪,三轴地磁传感器和一个自带算法处理的32位微控制器。