数据结构OJ题——二叉树前序、中序遍历非递归实现(Java版)

二叉树前序、中序遍历非递归实现

  • 前序非递归遍历实现
  • 中序非递归遍历实现

前序非递归遍历实现

题目: 二叉树前序遍历非递归实现
总体思路:用非递归的方式模拟递归遍历。
以下图为例:
在这里插入图片描述
图示详解:
在这里插入图片描述
代码实现:

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> list = new ArrayList<>();if(root == null){return list;}TreeNode cur = root;Stack<TreeNode> stack = new Stack<>();while(cur != null || stack.isEmpty() == false){//这个循环条件很难想到while(cur != null){stack.push(cur);list.add(cur.val);cur = cur.left;}//此时节点为空TreeNode top = stack.pop();cur = top.right;}return list;}
}

中序非递归遍历实现

题目: 二叉树中序遍历非递归实现
思路:中序非递归遍历和前序非递归遍历总体思路相同,唯一一个区别点是如果cur节点非空时,只压栈,list中并不立即记录当前cur的val值,同时令cur = cur.left。当cur == null时,栈顶元素出栈,此时在list中记录。如下以一组图示进行形象说明。
在这里插入图片描述
中序遍历和前序遍历代码处的不同只有一处,如下:
在这里插入图片描述
中序遍历非递归完整代码:

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public List<Integer> inorderTraversal(TreeNode root) {List<Integer> list = new ArrayList<>();if(root == null){return list;}TreeNode cur = root;Stack<TreeNode> stack = new Stack<>();while(cur != null || stack.isEmpty() == false){//这个循环条件很难想到while(cur != null){stack.push(cur);               cur = cur.left;}TreeNode top = stack.pop();list.add(top.val);cur = top.right;}return list;}
}

总结:前序、中序非递归遍历,两者只是在节点的记录时机不同,而节点的遍历路径完全相同。这也从根本上导致了两道题的AC代码几乎相同。

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

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

相关文章

【软考中级】3天擦线过软考中级-软件设计师

前提&#xff1a;已有数据结构、操作系统、计算机网络、数据库基础 &#xff08;风险系数较高&#xff0c;请谨慎参考&#xff09; 贴一个成绩单hhhh 弯路&#xff1a;很早之前有看过一遍网上的软考课程&#xff0c;也记录了一些笔记&#xff0c;然而听完还是啥都记不住。 推…

安科瑞弧光保护装置助力煤矿高压开关柜的可靠供电

摘要 在煤矿高压开关柜运行中&#xff0c;由于受到多种因素的干扰&#xff0c;中低压母线发生故障的概率较高&#xff0c;在中低压母线装设中又没有设置专门的保护&#xff0c;所以开关柜电弧光短路等问题时有发生&#xff0c;对变压器等设备造成一定的损害。鉴于此&#xff0c…

【MySQL源码】Seconds_Behind_Master是如何计算的

作为MySQL DBA&#xff0c;相信大家对参数 Seconds_Behind_Master 并不陌生&#xff0c;该字段的值可以通过 show slave status\G的输出&#xff0c;表示主从延迟的时间&#xff0c;单位为秒。监控主从延迟一般取这个值就足够了。0 表示无延迟&#xff0c;理想状态该值不要超…

iou的cpu和gpu源码实现

本专栏主要是深度学习/自动驾驶相关的源码实现,获取全套代码请参考 简介 IoU&#xff08;Intersection over Union&#xff09;是一种测量在特定数据集中检测相应物体准确度的一个标准&#xff0c;通常用于目标检测中预测框&#xff08;bounding box&#xff09;之间准确度的…

C语言|算术操作符相关题目

下面代码的结果是&#xff1a;( ) #include <stdio.h> int main() {int a, b, c;a 5;c a;b c, c, a, a;b a c;printf("a %d b %d c %d\n:", a, b, c);return 0; }A.a 8 b 23 c 8 B.a 9 b 23 c 8 C.a 9 b 25 c 8 D.a 9 b 24 c 8 解析&…

SSM项目集成Spring Security 4.X版本(使用spring-security.xml 配置文件方式)

目录 前言 实战开发&#xff1a; 一、Spring Security整合到SSM项目 1. pom文件引入包 2. web.xml 配置 3. 添加 spring-security.xml 文件 二、Spring Security实战应用 1. 项目结构 2. pom文件引入 3. web.xml 配置 4. Spring 配置 applicationContext.xml 5. sp…

Gartner:浪潮信息居全球服务器份额第二,中国第一

近日&#xff0c;国际权威研究机构高德纳&#xff08;Gartner&#xff09;公布《2023年第3季度全球服务器市场追踪报告》&#xff0c;2023Q3全球服务器出货量为280.6万台&#xff0c;同比下降17.0%&#xff0c;销售额为329.3亿美元&#xff0c;同比增长9.6%。浪潮信息服务器蝉联…

2-SAT问题相关理论和算法

前言 SAT 问题简介 SAT是可满足性、适定性(Satisfiability)问题的简称。一般形式为k-适定性问题或k-可满足性问题&#xff0c;简称 k-SAT。 何为布尔可满足性问题&#xff1f;给定一条真值表达式&#xff0c;包含逻辑变量、逻辑与、逻辑或以及非运算符&#xff0c;如&#x…

BioTech - 量子化学与分子力场

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/135787607 量子化学是应用量子力学的规律和方法来研究化学问题的一门学科&#xff0c;主要关注分子的结构、性质和反应过程。 量子化学的理论方法…

Redis解决方案:NOAUTH Authentication required(连接jedis绑定密码或修改redis密码)

Redis解决方案&#xff1a;NOAUTH Authentication required&#xff08;连接jedis绑定密码或修改redis密码&#xff09; Java使用jedis连接redis时出现错误NOAUTH Authentication required 一、问题报错和原因 本地设置了redis的密码&#xff0c;但在远程连接时并没有输入密…

定向减免!函数计算让 ETL 数据加工更简单

业内较为常见的高频短时 ETL 数据加工场景&#xff0c;即频率高时延短&#xff0c;一般费用大头均在函数调用次数上&#xff0c;推荐方案一般为攒批处理&#xff0c;高额的计算成本往往令用户感到头疼&#xff0c;函数计算推出定向减免方案&#xff0c;让 ETL数据加工更简单、更…

浅谈手机APP测试(流程)

前言 APP测试是一个广泛的概念&#xff0c;根据每个app的应用场景不一样&#xff0c;测试的方向也略微的不同&#xff0c;在测试过程中需要灵活应用自身所知的测试手段。 今天就跟大家简单聊聊手机APP测试的一些相关内容。 APP开发流程 &#xff08;1&#xff09; 拿到需求分…

2024年,IT行业下一个就业风口在哪?

搜狐&#xff1a;我宣布与华为达成鸿蒙全面合作&#xff01; 美团&#xff1a;我宣布与华为达成鸿蒙全面合作&#xff01; 360 &#xff1a;我宣布与华为达成鸿蒙全面合作&#xff01; 高德&#xff1a;我宣布与华为达成鸿蒙全面合作&#xff01; 新浪&#xff1a;我宣布与华为…

一站式解决钉钉开票与金蝶云星辰对接问题,让企业管理更轻松!

客户介绍 某企业服务有限公司专注于为企业提供全方位、高质量的企业服务&#xff0c;致力于于企业管理咨询、企业形象策划、市场营销策划、财务管理咨询等方面。该公司拥有一支经验丰富、专业化的团队&#xff0c;他们深入了解企业需求&#xff0c;为客户提供个性化的解决方案…

MoEs学习

和多任务学习的mmoe很像哦&#xff08;有空再学习一下&#xff09;moe layer的起源&#xff1a;Switch Transformers paper MoE moe由两个结构组成&#xff1a; Moe Layer &#xff1a;这些层代替了传统 Transformer 模型中的前馈网络 (FFN) 层。MoE 层包含若干“专家”(例如…

如何使用阿里云CDN服务?

如何使用阿里云CDN服务 一、开通阿里云CDN服务 注册自己阿里云账号&#xff0c;找到CDN服务&#xff0c;进行加速即可 二、配置域名信息 1、各配置参数的含义 添加加速域名&#xff1a; 如果需要使用CDN加速指定网站上的业务&#xff0c;则需要将该网站作为源站&#xff0…

“豚门”、“吗喽”,为啥品牌宣传瞄上网红动物?

近期&#xff0c;新茶饮品牌喜茶联名红山动物园&#xff0c;凭借可爱周边拿捏无数消费者&#xff0c;再往前一段时间&#xff0c;还有奈雪联名“吗喽”表情包&#xff0c;为什么品牌宣传会瞄上网红动物&#xff0c;今天媒介盒子就来和大家聊聊。 一、 萌元素引起用户情绪共鸣 …

蓝桥杯---三羊献瑞

观察下面的加法算式: 其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字。 请你填写“三羊献瑞”所代表的4位数字(答案唯一),不要填写任何多余内容。 答案 代码 public class _03三羊献瑞 {public static void main(String[] args) {//c 生 b 瑞 g 献 d 辉…

如何系统学习机器学习?

要系统学习机器学习&#xff0c;首先需要掌握一些基础编程技能&#xff0c;如Python。其次&#xff0c;学习基础的数学概念&#xff0c;如线性代数、概率论和统计学。然后&#xff0c;选择一些优质的在线课程和教材进行深入学习。最后&#xff0c;通过实践项目来巩固所学知识。…

html火焰文字特效

下面是代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>HTML5火焰文字特效DEMO演示</title><link rel"stylesheet" href"css/style.css" media"screen" type&quo…