173. 二叉搜索树迭代器

news2025/1/11 6:57:02

实现一个二叉搜索树迭代器类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

解:

public class Test {
    public static void main(String[] args) {
        TreeNode node7 = new TreeNode(7);
        TreeNode node3 = new TreeNode(3);
        TreeNode node15 = new TreeNode(15);
        TreeNode node9 = new TreeNode(9);
        TreeNode node20 = new TreeNode(20);
        node7.left = node3;
        node7.right = node15;
        node15.left = node9;
        node15.right = node20;

        BSTIterator bSTIterator = new BSTIterator(node7);
        System.out.println(bSTIterator.next());     // 返回 3
        System.out.println(bSTIterator.next());     // 返回 7
        bSTIterator.hasNext();                      // 返回 True
        System.out.println(bSTIterator.next());     // 返回 9
        bSTIterator.hasNext();                      // 返回 True
        System.out.println(bSTIterator.next());     // 返回 15
        bSTIterator.hasNext();                      // 返回 True
        System.out.println(bSTIterator.next());     // 返回 20
        bSTIterator.hasNext();                      // 返回 False
    }

    static class BSTIterator {
        int idx;
        List<Integer> arr;

        public BSTIterator(TreeNode root) {
            idx = 0;
            arr = new ArrayList<>();
            inorder(root, arr);
        }

        // 中序遍历,把值放入list
        private void inorder(TreeNode root, List<Integer> arr) {
            if (root == null) {
                return;
            }
            inorder(root.left, arr);
            arr.add(root.val);
            inorder(root.right, arr);
        }

        public int next() {
            return arr.get(idx++);
        }

        public boolean hasNext() {
            return idx < arr.size();
        }
    }
}

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

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

相关文章

STM32F4 | PWM输出实验

文章目录一、PWM 简介二、硬件设计三、软件设计四、实验现象五、STM32CubeMX 配置定时器 PWM 输出功能上一章&#xff0c;我们介绍了 STM32F429 的通用定时器 TIM3&#xff0c;用该定时器的中断来控制 DS1 的闪烁&#xff0c;这一章&#xff0c;我们将向大家介绍如何使用 S…

CososCreator (Android)-AppLovin MAX 广告聚合平台接入+Firebase统计

CososCreator 2.2.4 Android Studio &#xff1a;4.2.1 接入SDK有&#xff1a;接max聚合及中介平台(Admob&#xff0c;FB, applovin&#xff0c;pangle&#xff0c;mintegral&#xff0c;vungle&#xff0c;unity)&#xff0c;和Firebase 统计 1、构建Android工程 2、升级gr…

计算机SSM毕设推荐 40个高质量软件工程毕设项目分享【源码+论文】(一)

文章目录前言 题目1 : 基于SSM的毕业设计管理系统 <br /> 题目2 : 基于SSM的病人跟踪治疗信息管理系统 <br /> 题目3 : 基于SSM的大学生兼职跟踪系统 <br /> 题目4 : 基于SSM的大学生企业推荐系统 <br /> 题目5 : 基于SSM的电影院在线售票系统 <br …

电感和磁珠的区别

电感和磁珠在我们电路设计中经常会用到&#xff0c;他们都属于磁性元器件&#xff0c;今天就来分享下电感和磁珠的区别 1.从构成原理来看 电感其实就是导线这样一圈一圈绕在磁芯上&#xff0c;这样就构成了电感&#xff0c;而磁珠(插件)的话则是导线外围包裹着一层铁氧体磁性材…

Linux中磁盘存储相关命令

du 命令 Linux du命令也是查看使用空间的&#xff0c;但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看&#xff0c;还是和df命令有一些区别的. **1&#xff0e;**命令格式&#xff1a; du [选项][文件] **2&#xff0e;**命令功能&#xff1a; 显示每…

javaHelloWorld

java语言介绍 ​ 目前大系统开发中&#xff0c;很少使用单一语言进行开发&#xff0c;现有语言也十分发达&#xff0c;包含Java\C\C\PHP\Python等等。通常情况下&#xff0c;一个大系统底层驱动部分都是使用C语言开发&#xff0c;而在上层用户交互层使用java语言开发。因此&am…

新型材料厂电动葫芦PLC无线通讯应用方案详解

一&#xff0e;应用背景 电动葫芦是一种安装在天车、龙门吊之上的特种起重设备&#xff0c;具有体积小&#xff0c;自重轻&#xff0c;操作简单&#xff0c;使用方便等特点&#xff0c;是起升搬运物品&#xff0c;最理想的起重设备之一。目前电动葫芦的控制部分都是由PLC完成的…

【Spring Cloud】Ribbon负载均衡原理与实战(源码级讲解)

本期目录1. 负载均衡原理1.1 总体流程1.2 源码解析2. 负载均衡策略2.1 负载均衡策略继承关系2.2 负载均衡策略描述1&#xff09;ZoneAvoidanceRule2&#xff09;AvailabilityFilteringRule2.3 修改负载均衡策略方式1&#xff09;全局修改2&#xff09;局部修改3. 饥饿加载3.1 背…

使用VackBAS攻击模拟平台对抗勒索病毒

勒索病毒是一种恶意软件&#xff0c;它可以从一台主机直接感染到整个网络&#xff08;包括服务器&#xff09;并加密磁盘上的任何文件和文档&#xff0c;勒索软件会要求受害者缴纳赎金以取回对电脑的控制权&#xff0c;或取回受害者根本无从自行获取的密钥去解密文件。勒索病毒…

jsp+ssm计算机毕业设计宠物店管理系统【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

数论的一些小小的性质总结

gcd的一些套路&#xff1a; 1.设一些未知数&#xff0c;设gcd为k&#xff0c;换个角度去看问题&#xff0c;比如去枚举倍数 2.一堆数的gcd为1&#xff0c;等价于它们所有数的因子重合小于n&#xff1b;两个数的gcd1&#xff0c;它们的因子之间没有重合 3.相邻两数之间gcd1&a…

SpringMVC:SpringMVC请求映射路径(3)

SpringMvc请求路径1. 环境准备2. 问题提出3. 设置映射路径3.1 方法一&#xff1a;修改Controller3.2 方法二&#xff1a;优化路径配置1. 环境准备 项目结构 BookController类 public class BookController {RequestMapping("/save")ResponseBodypublic String save…

告别XML,Android新声明式UI框架《Jetpack Compose入门到精通》最全开发指南

什么是Jetpack Compose? Jetpack Compose是Android的新声明式UI框架。长期以来, Android 开发人员习惯于使用带有状态视图的xml编写UI,这些状态视图通过逐步浏览视图层次结构进行更新。使用Jetpack Compose, UI 是通过使用KotinQ 函数以无状态方式编写的。 可组合函数使用注…

大一学生HTML期末作业 【html体育排球5页面带注册】学生网页设计作业源码

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

RT-Thread Studio创建STM32WB55工程

STM32WB是ST推出的物联网标准无线连接SoC芯片&#xff0c;可支持BLE、ZigBee等标准协议&#xff0c;内置M4F和M0双内核&#xff0c;其中M0主要运行底层协议栈&#xff0c;而M4F则可以用于应用的开发。 RT-Thread是国内目前比较成熟、比较成熟的物联网操作系统了&#xff0c;有…

C++ Reference: Standard C++ Library reference: Containers: map: map: crend

C官网参考链接&#xff1a;https://cplusplus.com/reference/map/map/crend/ 公有成员函数 <map> std::map::crend const_reverse_iterator crend() const noexcept;返回指向反向结束的const_reverse_iterator 返回一个const_reverse_iterator&#xff0c;指向容器中第…

CentOS 8 桌面版右上角网络图标消失的解决办法

我们在手动修改网络连接的配置文件后&#xff0c;桌面右上角的网络连接图标可能会消失。 正常显示的网络图标&#xff1a; 网络图标消失后的样子&#xff1a; CentOS 的网络连接由网络管理工具 NetworkManager 负责&#xff0c; 这个问题多半与其有关。 可能的原因 1&#xf…

音视频Media内核学习——OpenMax浅析

一、OpenMax简介&#xff08;缩写为&#xff1a;OMX&#xff09; OpenMAX是一个多媒体应用程序的标准。由NVIDIA公司和Khronos™在2006年推出。 它是无授权费的、跨平台的C语言程序接口序列&#xff0c;这些接口对音频、视频、静态图片的常用操作进行封装。 它包括三层&…

[激光原理与应用-57]:激光器 - 光学 - 常见光学镜片介绍

目录 第1章 光学镜片和普通镜片 1.1 光学镜片和普通镜片的区别 1.2 什么是光学镜片 1.3 反射镜 1.4 透镜 1.5 镜片镀膜 第2章 光学镜片的类型 2.1 半透镜 2.2 半透半反反射镜 - 分束镜 2.3 凸透镜 2.4 凹透镜 2.5 准直镜 2.6 偏振镜片 2.7 分色镜与分色反射镜 2…

【SAP ABAP】SAP Webservice RESTful 接口服务发布教程

SAP Webservice & RESTful 接口服务发布教程1、SAP Webservice 类型2、SAP Webservice 服务发布2.1、准备 RFC2.2、通过 RFC 创建服务2.3、查看 WSDL2.4、访问服务2.5、删除服务3、SAP RESTful 服务发布3.1、创建数据服务类3.2、维护服务3.3、访问服务3.4、删除服务4、SAP …