【力扣题解】P94-二叉树的中序遍历-Java题解

花无缺

👨‍💻博客主页:@花无缺
欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!
本文由 花无缺 原创

收录于专栏 【力扣题解】


文章目录

  • 【力扣题解】P94-二叉树的中序遍历-Java题解
    • 🌏题目描述
    • 💡题解
    • 🌏总结


【力扣题解】P94-二叉树的中序遍历-Java题解

P94.二叉树的中序遍历

🌏题目描述

给定一个二叉树的根节点 root ,返回 它的 中序 遍历

示例 1:

在这里插入图片描述

输入:root = [1,null,2,3]
输出:[1,3,2]

示例 2:

输入:root = []
输出:[]

示例 3:

输入:root = [1]
输出:[1]

提示:

  • 树中节点数目在范围 [0, 100]
  • -100 <= Node.val <= 100

💡题解

递归法

public List<Integer> inorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<>();inorder(root, res);return res;
}
public void inorder(TreeNode root, List<Integer> list) {// 节点为空, 递归终止if (root == null) {return;}// 递归遍历左子树inorder(root.left, list);// 遍历根节点list.add(root.val);// 递归遍历右子树inorder(root.right, list);
}

时间复杂度:O(n),其中 n 为二叉树节点的个数。二叉树的遍历中每个节点会被访问一次且只会被访问一次。

迭代法

public List<Integer> inorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<>();// 空树, 返回空列表if (root == null) {return res;}// 用栈模拟模拟递归Deque<TreeNode> stack = new LinkedList<>();// 使用一个额外的辅助指针帮助我们进行中序遍历TreeNode cur = root;while (cur != null || !stack.isEmpty()) {// 指针 cur 访问到最底层的最左边的节点// 同时将访问到的所有节点入栈if (cur != null) {stack.offerLast(cur);// 左cur = cur.left;} else {cur = stack.pollLast();// 中res.add(cur.val);// 右cur = cur.right;}}return res;
}

时间复杂度:O(n),其中 n 为二叉树节点的个数。二叉树的遍历中每个节点会被访问一次且只会被访问一次。

🌏总结

首先我们先来了解什么是二叉树的中序遍历:二叉树的中序遍历就是按照:左子树->根节点->右子树的顺序遍历这棵二叉树。对于二叉树的操作,我们首先就会想到递归的方法。

而对于迭代法,其实也是递归思想,递归法隐式地维护了一个栈,而迭代法就是显式的维护一个栈达到模拟递归的效果。而二叉树的中序遍历的迭代法和前序遍历、后序遍历又有不一样的地方,我们知道对于二叉树的前序遍历和后序遍历,都是从根节点开始入栈并出栈,也就是说访问的节点就是我们要操作的节点,但是对于中序遍历来说就不是这样的,因为我们第一个访问的节点是根节点,但是我们首先应该是要操作左子树节点,所以中序遍历和另外两种遍历并不是完全相同的,我们需要借助一个指针先找到二叉树的最左下的节点,然后再开始迭代的操作。

作者:花无缺(huawuque404.com)


🌸欢迎关注我的博客:花无缺-每一个不曾起舞的日子都是对生命的辜负~
🍻一起进步-刷题专栏:【力扣题解】
🥇往期精彩好文:
📢【CSS选择器全解指南】
📢【HTML万字详解】
你们的点赞👍 收藏⭐ 留言📝 关注✅
是我持续创作,输出优质内容的最大动力!
谢谢!

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

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

相关文章

鸿蒙原生应用/元服务开发-Stage模型能力接口(十)下

ohos.app.form.FormExtensionAbility (FormExtensionAbility) 系统能力&#xff1a;SystemCapability.Ability.Form 示例 import FormExtensionAbility from ohos.app.form.FormExtensionAbility; import formBindingData from ohos.app.form.formBindingData; import formP…

Miniconda 3 | 出发,探索Python

介绍 Miniconda 是 Anaconda 的精简版本&#xff0c;是一个轻量级的 Python 包管理工具和环境管理工具。 优势和功能主要包括&#xff1a; 轻量级和快速安装&#xff1a; Miniconda 相比 Anaconda 更小巧&#xff0c;只包含最基本的工具和包管理功能。安装速度更快&#xff0c…

三维点通用排序

前言 NWAFU 2021阶段二 C 一、题目描述 题目描述 在三维笛卡尔坐标系中&#xff0c;可以用X,Y,Z三个坐标分量表示三维空间中的一个点。现有一系列用X,Y,Z表示的三维点&#xff0c;需要对其按指定的X、Y或Z分量进行升序或降序排序。请用C语言实现这一排序过程&#xff0c;程序…

端口+目录扫描

目录 前言&#xff1a; 基础知识&#xff1a; 状态码&#xff1a; 2XX&#xff1a; 3XX: 4XX&#xff1a; 5XX&#xff1a; 消息头&#xff1a; 请求头&#xff1a; 响应头&#xff1a; 目录扫描&#xff1a; 接口扫描&#xff1a; 主机存活扫描&#xff1a; I…

如何预防cookie被盗用

1.设置Cookie的HttpOnly属性为true。 一般来说,跨站脚本攻击(XSS)最常见的攻击方式就是通过在交互式网站(例如论坛、微博等)中嵌入javascript脚本,当其他用户访问嵌有脚本的网页时,攻击者就能通过document.cookie窃取到用户cookie信息。如果网站开发者将cookie的httponl…

网页设计期末 建筑博物馆首页 HTML+CSS+js 完整代码(轮播图+瀑布流)

文章目录 前言&#xff1a;完整代码在总结处跳转&#xff01;&#xff01;&#xff01; 描述&#xff1a;结果展示&#xff1a;部分代码演示&#xff1a;&#xff08;完整代码在总结处跳转&#xff09;总结&#xff1a;&#xff08;完整代码在此处跳转&#xff09; 前言&#x…

LINUX 解决系统卡死:扩大内存交换分区

最近电脑总是卡住&#xff0c;让我很是苦恼。运行程序时发现可能是内存占满之后导致界面卡住。下面是在我16G内存的电脑上折腾的过程与结果&#xff1a; 查看当前的交换内存大小free -m&#xff08;单位&#xff1a;-m选项表示以兆字节&#xff08;MB&#xff09;为单位显示内…

C++面试宝典第11题:两数之和

题目 给定一个整数数组和一个目标值,请在该数组中找出和为目标值的那两个整数,并返回他们的数组下标,要求时间复杂度为O(n)。可以假设每种输入只会对应一个答案,注意:不能重复利用这个数组中同样的元素。 解析 这道题主要考察应聘者对算法时间复杂度和空间复杂度的理解,时…

【JVM篇】Java是如何实现平台无关的?

Java是如何实现平台无关的? ✔️什么是平台无关性✔️平台无关性的实现✔️Java虚拟机✔️字节码✔️Java语言规范 ✔️扩展知识仓✔️平台无关性的好处✔️ 有哪些语言实现了平台无关?✔️Java中基本数据类型的大小都是确定的吗? ✔️什么是平台无关性 平台无关性就是一种语…

android 13 调整导航栏返回键和home键间距

定制android 13的圆形设备&#xff0c;底部导航栏的back , recent_app键都靠近两边导致只看到一个home键。 期望&#xff1a;调整back , recent_app 和home的间距&#xff0c;能让这个圆形屏幕的设备能按到back&#xff0c;recent_app按键 diff --git a/vendor/mediatek/prop…

(salutation称呼)Mr., Mrs., Miss, Ms., Mx.,Jr.,Sr.,II,III,IV 分别是什么意思

文章目录 前缀后缀 前缀 Mr.&#xff1a;先生 Mrs.&#xff1a;太太&#xff08;已婚&#xff09; Miss&#xff1a;小姐&#xff08;未婚&#xff09;&#xff0c;但不严格&#xff0c;有的时候学生称呼女老师可以直接用这个词&#xff0c;不必管是否结婚。 Sir&#xff1a;也…

Net6 Core webApi发布到IIS

Net6 Core Api发布到IIS不同于webapi&#xff0c;依赖框架不同&#xff0c;配置也移至项目内Program.cs 一、发布到指定文件夹和IIS&#xff0c;不过注意IIS应用程序池选择的是 “无托管代码“ 在IIS管理器中点击浏览&#xff0c;访问接口路径报500.19&#xff0c;原因是所依赖…

机器学习之K-means聚类

概念 K-means是一种常用的机器学习算法,用于聚类分析。聚类是一种无监督学习方法,它试图将数据集中的样本划分为具有相似特征的组(簇)。K-means算法的目标是将数据集划分为K个簇,其中每个样本属于与其最近的簇中心。 以下是K-means算法的基本步骤: 选择簇的数量(K值)…

json转换(json与对象互转、json与list互转、JSONObject与Map互转)

目录 一、json与对象互转1、json转自定义对象2、json字符串转JSONObject 二、json与list互转1、list转JsonArray类型字符串2、JsonArray类型字符串转list 三、JSONObject与Map互转1、Map转JSONObj 一、json与对象互转 1、json转自定义对象 User user JSONUtil.toBean(jsonSt…

HTTP协议编程实战(一)实战一

http使用在应用层&#xff0c;http是单次连接&#xff0c;一次只能发送一个请求。http是一个无状态协议&#xff0c;他不会保存客户端的状态信息&#xff0c;从而提高运行效率&#xff0c;保持比较快的响应速度。http是一种面向对象的协议&#xff0c;允许传送任意数据类型的对…

【Linux 程序】1. 程序构建

文章目录 【 1. 配置 】【 2. 编译 】makefile编写的要点makefile中的全局自变量CMake编译依赖的库g编译 【 3. 安装 】 一般源代码提供的程序安装需要通过配置、编译、安装三个步骤&#xff1b; 配置。检查当前环境是否满足要安装软件的依赖关系&#xff0c;以及设置程序安装所…

2024年医院设备维修培训安排

在你还考虑该不该干的时候别人已经走好远了 小时候觉得忘带作业是天大的事&#xff0c;高中的时候&#xff0c;觉得考不上大学是天大的事&#xff0c;恋爱的时候&#xff0c;觉得跟喜欢的人分开是天大的事&#xff0c;到现在回头看看&#xff0c;那些难以跨过的山&#xff0c;…

1200PLC连接分布式IO组态编程应用

SMART PLC作为S7-1200PLC的智能IO从站设备组态和编程应用详细介绍请参考下面链接文章&#xff1a; https://rxxw-control.blog.csdn.net/article/details/130257474https://rxxw-control.blog.csdn.net/article/details/130257474这篇博客我们介绍S7-1200PLC和分布式IO连接组…

【C语言深度剖析——第一节(关键字1)】《C语言深度解剖》+蛋哥分析+个人理解

你未曾见过火光&#xff0c;难怪甘愿漂泊寒夜 本文由睡觉待开机原创&#xff0c;未经允许不得转载。 本内容在csdn网站首发 欢迎各位点赞—评论—收藏 如果存在不足之处请评论留言&#xff0c;共同进步&#xff01; 首先简单介绍一下《C语言深度解剖》&#xff1a; 全书特点&am…

BUUCTF Reverse/[2019红帽杯]Snake

BUUCTF Reverse/[2019红帽杯]Snake 下载解压缩后得到可执行文件&#xff0c;而且有一个unity的应用程序&#xff0c;应该是用unity编写的游戏 打开是一个贪吃蛇游戏 用.NET Reflector打开Assembly-CSharp.dll。&#xff08;unity在打包后&#xff0c;会将所有的代码打进一个Ass…