【LeetCode: 173. 二叉搜索树迭代器 + dfs + 二叉搜索树】

news2024/11/26 14:56:53

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述

在这里插入图片描述

🍔 目录

    • 🚩 题目链接
    • ⛲ 题目描述
    • 🌟 求解思路&实现代码&运行结果
      • ⚡ dfs + 二叉搜索树
        • 🥦 求解思路
        • 🥦 实现代码
        • 🥦 运行结果
    • 💬 共勉

🚩 题目链接

  • 173. 二叉搜索树迭代器

⛲ 题目描述

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

🌟 求解思路&实现代码&运行结果


⚡ dfs + 二叉搜索树

🥦 求解思路
  1. 通过dfs对二叉搜索树做中序遍历,获取的结果保存在集合中。最后,通过获得到的集合来实现next()和hasnext()函数。
  2. next()函数:每次调用next()函数,通过集合来获取位置的元素,每次调用通过维护一个idx来实现。
  3. hasnext()函数:此时如果向指针右侧遍历存在数字,返回true,否则,返回false。通过 idx < arr.size() 来实现。
  4. 有了基本的思路,接下来我们就来通过代码来实现一下。
🥦 实现代码
class BSTIterator {
    
    private int idx = 0;
    private List<Integer> arr = new ArrayList<Integer>();

    public BSTIterator(TreeNode root) {
        dfs(root);
    }

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

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

    private void dfs(TreeNode root) {
        if (root == null) {
            return;
        }
        dfs(root.left);
        arr.add(root.val);
        dfs(root.right);
    }
}
🥦 运行结果

在这里插入图片描述


💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

常用小知识点总结

1. pc可以跑通&#xff0c;但是安卓编译死循环&#xff0c;可能是函数声明了返回类型&#xff0c;但是没有真正返回 2. ubuntu下根据关键词杀死所有相关进程。ps -ef | grep code | grep -v grep | cut -c 10-16 | xargs kill -s 9 top和ps基本作用都是显示系统进程状况&…

由浅到深认识Java语言(2):Java语言概述

该文章Github地址&#xff1a;https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.c…

《UE5_C++多人TPS完整教程》学习笔记28 ——《P29 Mixamo 动画(Mixamo Animations)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P29 Mixamo动画&#xff08;Mixamo Animations&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&#xff08;也是译者…

【机器学习-05】模型的评估与选择

在前面【机器学习-01】机器学习基本概念与建模流程的文章中我们已经知道了机器学习的一些基本概念和模型构建的流程&#xff0c;本章我们将介绍模型训练出来后如何对模型进行评估和选择等 1、 误差与过拟合 学习器对样本的实际预测结果与真实值之间的差异&#xff0c;我们称之…

蓝桥刷题--四元组问题和肖恩的投球游戏加强版

1.四元组问题 我的这个代码有点问题&#xff0c;我也找不出来&#xff0c;哪位大佬指正一下 // 四元组问题 //思路 // 是否存在 a < b < c < d, 使得nums[d] < nums[c] < nums[a] < nums[b] //分别维护二元组 (a, b) 和 (c, d), 对合法 b 维护前缀 max 的 n…

安卓Android入门

安卓作为日常生活中不可缺少的移动操作系统&#xff0c;在5G的发展和应用过程中发挥着其重要的作用。 5G是第五代移动通信技术&#xff0c;拥有更快的速度、更高的带宽、更低的延迟和更大的连接密度。这一技术的快速发展为移动设备和应用提供了更多的可能性。 安卓和5G的关系…

低代码 + 大模型,让业务系统智能化,加速想法落地

1 AI 时代下的应用 大模型来了&#xff0c;每个行业/领域都在融合大模型。作为低代码开发的探索者&#xff0c;今天我们来聊聊业务系统是如何融合大模型实现智能化的。 我们用百度内部实际应用场景来举例。比如请假&#xff0c;智能业务助手可以帮你&#xff1a; 了解…

卸载torch并更新版本,torch-gpu的下载安装--亲测有效!!

以前一直抱怨实验室的cuda版本&#xff0c;以前是10.1&#xff0c;导致只能安装最低配版本的torch&#xff0c;也就是torch1.8.1&#xff0c;现在内核版本和驱动都更新了&#xff0c;变成了cuda11.4&#xff0c;以前的环境都没办法跑代码&#xff0c;只能重新进行卸载安装。 1…

计算机毕业设计-基于Python的“哔哩哔哩视频网”视频热度分析

概要 在21世纪的今天&#xff0c;网络发展越来越快&#xff0c;网上的娱乐方式也越来越多样化&#xff0c;而如今在网上观看视频消遣时间越来越受到大众的青睐。Bilibili视频网站是现当下年轻人最受欢迎的一个视频网站。有调查显示&#xff0c;直到2019年的10月份&#xff0c;B…

flowable-ui部署

版本 java: java8+tomcat: apache-tomcat-9.0.87flowable: flowable-6.8.1mysql驱动: mysql-connector-java-8.0.30.jar 注意:版本一定要对,否则启动报错执行数据库脚本 创建数据库flowable执行脚本,脚本位于解压flowable-6.8.1.zip后的flowable-6.8.1/database/create/all/…

机器学习——终身学习

终身学习 AI不断学习新的任务&#xff0c;最终进化成天网控制人类终身学习&#xff08;LLL&#xff09;&#xff0c;持续学习&#xff0c;永不停止的学习&#xff0c;增量学习 用线上收集的资料不断的训练模型 问题就是对之前的任务进行遗忘&#xff0c;在之前的任务上表现不好…

MySQL数据库的基本概念与安装

目录 引言 一、数据库的基本概念 &#xff08;一&#xff09;数据、表与数据库 1.数据(Data) 2.表 3.数据库 &#xff08;二&#xff09;数据库管理系统 &#xff08;三&#xff09;数据库系统 二、数据库的发展 三、主流数据库的介绍 &#xff08;一&#xff09;关…

基于BusyBox的imx6ull移植sqlite3到ARM板子上

1.官网下载源码 https://www.sqlite.org/download.html 下载源码解压到本地的linux环境下 2.解压并创建install文件夹 3.使用命令行配置 在解压的文件夹下打开终端&#xff0c;然后输入以下内容&#xff0c;其中arm-linux-gnueabihf是自己的交叉编译器【自己替换】 ./config…

杰发科技AC7801——读取Flash数据做CRC校验

查看Keil的编译结果发现总共6160个字节。计算结果如下&#xff0c; 代码如下 #include "ac780x_crc.h" #include "ac780x.h" #include "ac780x_debugout.h" #include "string.h" #include "ac780x_eflash.h"#define TestSi…

2024年第二届亚洲前沿图像处理会议(AAIP 2024)即将召开!

2024年第二届亚洲前沿图像处理会议(AAIP 2024)将于2024年7月26-28日在泰国曼谷召开。本次会议由温特沃斯理工学院、国立中山大学、泰国国立法政大学联合主办&#xff0c;JOIG期刊参与支持。会议旨在促进图像处理相关领域学术交流与合作&#xff0c;热忱欢迎从事相关技术研究的专…

【PyQt】17-日历控件

文章目录 前言一、代码二、运行结果总结 前言 固定格式的表述 日期的获取 一、代码 #Author &#xff1a;susocool #Creattime:2024/3/19 #FileName:40-日历控件 #Description: 日历控件的展示 import sys from PyQt5.QtCore import * from PyQt5.QtWidgets import * from PyQ…

麒麟 V10 一键安装 Oracle 11GR2(231017)单机版

Oracle 一键安装脚本&#xff0c;演示 麒麟 V10 一键安装 Oracle 11GR2 单机版过程&#xff08;全程无需人工干预&#xff09;&#xff1a;&#xff08;脚本包括 ORALCE PSU/OJVM 等补丁自动安装&#xff09; ⭐️ 脚本下载地址&#xff1a;Shell脚本安装Oracle数据库 脚本第…

代码随想录算法训练营第十一天| 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值

题目&#xff1a;20. 有效的括号 文章链接&#xff1a;代码随想录 视频链接&#xff1a;LeetCode:20.有效的括号 题目链接&#xff1a;力扣题目链接 图释&#xff1a; class Solution { public:// 有效的括号 bool isValid(string s) {// 遇到左括号时就放入右括号&#xf…

【C语言】结构体类型名、变量名以及typedef

文章目录 分类判断结构体成员的使用typedef 分类判断 struct tag {char m;int i; }p;假设定义了上面这一个结构体&#xff0c;tag 就是类型名&#xff0c; p 就是变量名&#xff0c; m 和 i 就是结构体成员列表。 可以这么记&#xff0c;括号前面的是类型名&#xff0c;括号后…

尝试搭建谷粒商城 记录(四)

1、分布式组件 父工程引入依赖&#xff08;已完成&#xff09; spring boot 2.1.8.RELEASE spring cloud Greenwich.SR3 spring cloud alibaba 2.1.0.RELEASE 1. nacos用作服务注册中心 1、nacos下载安装 下载地址&#xff1a; https://github.com/alibaba/nacos/rel…