力扣94 二叉树的中序遍历 (Java版本) 递归、非递归

文章目录

  • 题目描述
  • 递归解法
  • 非递归解法


题目描述

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

示例 1:
在这里插入图片描述

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

输入:root = []
输出:[]
示例 3:

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

提示:

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

进阶: 递归算法很简单,你可以通过迭代算法完成吗?

递归解法

class Solution {//使用递归的方法public List<Integer> inorderTraversal(TreeNode root) {List<Integer> result = new ArrayList<>();inorder(root,result);return  result;}public void inorder(TreeNode root,List<Integer> result){if (root==null){return;}if (root.left!=null){inorder(root.left,result);}result.add(root.val);if(root.right!=null){inorder(root.right,result);}}}

非递归解法

class Solution {//使用非递归的方法public List<Integer> inorderTraversal(TreeNode root) {List<Integer> result = new ArrayList<>();inorder(root,result);return  result;}public void inorder(TreeNode root,List<Integer> result){if (root==null){return;}Stack<TreeNode> stack = new Stack<>();TreeNode cur=root;//负责遍历//cur一直往左孩子的方向走,并且把指向的节点压入栈中//如果cur当前指向的节点为空,就开始从栈中弹出一个节点并且遍历(弹出的这个节点相当于cur上一次指向的节点),遍历完这个节点之后就开始往右孩子的方向走while (cur!=null||!stack.isEmpty()){if (cur!=null){stack.push(cur);cur = cur.left;}else {//cur为空则表示上个节点没有左孩子,弹出刚才的节点并且遍历cur = stack.pop();result.add(cur.val);//开始往当前节点的右孩子方向走cur = cur.right;//然后结束本轮循环,进入下一轮循环。如果cur为空则表示也没有右孩子,就继续从栈顶弹出元素遍历,如果不为空则压入栈并且开始找左孩子。}}}
}

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

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

相关文章

Unity之闪电侠大战蓝毒兽(简陋的战斗系统)

目录 &#x1f3a8;一、创建地形 &#x1f3ae;二、创建角色 &#x1f3c3;2.1 动画 &#x1f3c3;2.2 拖尾 &#x1f3c3;2.3 角色控制 ​&#x1f3c3;2.4 技能释放 &#x1f3c3;2.5 准星 &#x1f4f1;三、创建敌人 &#x1f432;3.1 选择模型 &#x1f432;3.…

VMware Workstation 17安装教程:安装系统

点击开启虚拟机 安装向导的初始化界面 Keyboard和Language Support分别指的是键盘类型和语言支持&#xff0c;我们首先单击Time & Date按钮&#xff0c;设置系统的时区和时间。在地图上单击中国境内即可显示出上海的当前时间&#xff0c;确认后单击左上角的Done按钮。系统…

从starrocks安装说起和Oracle的OLAP殊途同归

StarRocks是一款分析型数据库&#xff08;他的定语也很多&#xff0c;分布式存算分离等等&#xff09;。作为数据库他的运行和维护迟早也是落在我这里的。对于做数据库的人都知道什么是交易型数据库&#xff0c;什么是分析型数据库。以及什么是事务分析混合型数据库。但是对于非…

Golang for 循环

从基础知识到高级技术、并发和通道 Go&#xff08;Golang&#xff09;编程语言中的“for”循环是一个基本而多功能的结构&#xff0c;用于迭代集合、重复执行代码块以及管理循环控制流。Golang的“for”循环语法简洁却强大&#xff0c;为处理多样的循环场景提供了一系列能力。无…

大厂的数据质量中心系统设计

日常工作中&#xff0c;数据开发上线完一个任务后并不是就可以高枕无忧&#xff0c;时常因上游链路数据异常或者自身处理逻辑的 BUG 导致产出的数据结果不可信。而问题发现可经历较长周期&#xff08;尤其离线场景&#xff09;&#xff0c;往往是业务方通过上层数据报表发现数据…

【Unity】【VR开发】如何创建让物体透明的Material

【背景】 在VR开发中&#xff0c;如果遇到需要锚点传送移动的场景&#xff0c;作为锚点的目标往往需要设置为透明。本篇介绍简单设置Material使3D GameObject便透明的方法。 【操作方法】 新建一个Material对象选中Material对象后&#xff0c;在Inspector面板中重选Shader属…

Excel练习:双层图表

Excel练习&#xff1a;双层图表 学习视频Excel制作双层图表&#xff0c;很多人都不会&#xff0c;其实只需1步操作就够了&#xff01;_哔哩哔哩_bilibili ​​ 通过调整两个图形的显示范围实现 增加折现图的负数显示范围&#xff0c;使折现图仅出现在整体图形的上方增加柱形…

Kotlin 基本语法5 继承,接口,枚举,密封

1.继承与重写的Open关键字 open class Product(val name:String ) {fun description() "Product: $name"open fun load() "Nothing .."}class LuxuryProduct:Product("Luxury"){//继承需要调用 父类的主构造函数override fun load(): String {…

Mybatis | 初识Mybatis

初识Mybatis 目录: 初识Mybatis什么是Mybatis&#xff1f;Hibernate 和 MyBatis的区别&#xff1f;Mybatis的下载和使用Mybatis的工作原理 作者简介 &#xff1a;一只大皮卡丘&#xff0c;计算机专业学生&#xff0c;正在努力学习、努力敲代码中! 让我们一起继续努力学习&#…

从宏观到微观——泽攸科技ZEM系列台式扫描电子显微镜在岩石分析中的应用

岩石作为地球地壳的主要构成物质之一&#xff0c;其微观结构对于了解地质过程、资源勘探以及工程建设具有重要意义。按照岩石的成因&#xff0c;可以把它们分为三类&#xff1a;岩浆岩、沉积岩和变质岩。在地球表面&#xff0c;沉积岩占据75%的份额&#xff0c;而在地壳深度&am…

卡车拆解不再难:可视化示意图的魔力

随着科技的飞速发展和工业的不断进步&#xff0c;卡车作为物流运输的核心力量&#xff0c;承担着越来越多的运输任务。然而&#xff0c;当卡车出现故障或需要维护时&#xff0c;复杂的拆解流程往往让人头疼不已。这时&#xff0c;一份清晰易懂的卡车拆解示意图就显得尤为重要。…

解决本地googleapis 谷歌统计 nodejs 遇到 ECONNRESET和 ETIMEDOUT

在本地通过谷歌分析接口, 获取网站的访问量统计, 用于在管理端面板世界地图显示 获取分析数据的部分代码,这部分很简单示例有 // 获得前10个页面浏览量与页面标题在过去30天 const {BetaAnalyticsDataClient} require(google-analytics/data); const analyticsDataClient ne…