Java二叉树的前中后序遍历
创始人
2025-05-30 14:05:17

Java二叉树的前中后序遍历

  • 1.前序遍历
    • 1.1前序遍历概念
    • 1.2前序遍历习题
  • 2.中序遍历
    • 2.1中序遍历概念
    • 2.2中序遍历习题
  • 3.后续遍历
    • 3.1后序遍历概念
    • 3.2后序遍历习题

大家好,我是晓星航。今天为大家带来的是 Java二叉树的前中后序遍历 的讲解!😀

1.前序遍历

1.1前序遍历概念

[前序遍历](前序遍历_百度百科 (baidu.com))(VLR), [1] 是二叉树遍历的一种,也叫做先根遍历、先序遍历、前序周游,可记做根左右。前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。

数学表达式形式:当对一棵数学表达式树进行中序,前序和后序遍历时,就分别得到表达式的中缀、前缀和后缀形式。

在后缀(postfix)表达式中,每个操作符跟在操作数之后,操作数按从左到右的顺序出现。在前缀(prefix)表达式中,操作符位于操作数之前。在前缀和后缀表达式中不会存在歧义。

因此,在前缀和后缀表达式中都不必采用括号或优先级。从左到右或从右到左扫描表达式并采用操作数栈,可以很容易确定操作数和操作符的关系。若在扫描中遇到一个操作数,把它压入堆栈,若遇到一个操作符,则将其与栈顶的操作数相匹配。把这些操作数推出栈,由操作符执行相应的计算,并将所得结果作为操作数压入堆栈。

1.2前序遍历习题

二叉树的前序遍历。 OJ链接

解法一(遍历思路:只new一个list,然后直接递归走完每一次,直接返回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 {List list = new ArrayList<>();public List preorderTraversal(TreeNode root) {if (root == null) {return list;}list.add(root.val);preorderTraversal(root.left);preorderTraversal(root.right);return list;}
}

解法二(子问题思路:每次都new一个新的list 再每一次递归时将他们直接存入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 preorderTraversal(TreeNode root) {List list = new ArrayList<>();if (root == null) {return list;}list.add(root.val);List leftTree = preorderTraversal(root.left);list.addAll(leftTree);List rightTree = preorderTraversal(root.right);list.addAll(rightTree);return list;}
}

思路:利用循环递归的方法来解决前序遍历法。

2.中序遍历

2.1中序遍历概念

[中序遍历](中序遍历_百度百科 (baidu.com))是二叉树遍历的一种,也叫做中根遍历、中序周游。在二叉树中,中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。

数学表达式形式:当对一棵数学表达式树进行中序,前序和后序遍历时,就分别得到表达式的中缀、前缀和后缀形式。中缀(infix)形式即平时所书写的数学表达式形式,在这种形式中,每个二元操作符(也就是有两个操作数的操作符)出现在左操作数之后,右操作数之前。在使用中缀形式时,可能会产生一些歧义。例如,x+y ×z可以理解为(x+y) ×z或x+ (y ×z)。为了避免这种歧义,可对操作符赋于优先级并采用优先级规则来分析中缀表达式。在完全括号化的中缀表达式中,每个操作符和相应的操作数都用一对括号括起来。更甚者把操作符的每个操作数也都用一对括号括起来。如( (x) + (y) ),( (x) + ( (y) * (z) ) )和( ( (x) + (y) ) * ( (y) + (z) ) ) * (w)。

2.2中序遍历习题

二叉树中序遍历 。OJ链接

/*** 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 inorderTraversal(TreeNode root) {List list = new ArrayList<>();if (root == null) {return list;}List leftTree = inorderTraversal(root.left);list.addAll(leftTree);list.add(root.val);List rightTree = inorderTraversal(root.right);list.addAll(rightTree);return list;}
}

思路:子问题思路:每次都new一个新的list 再每一次递归时将他们直接存入list中,利用循环递归的方法来解决前序遍历法。

3.后续遍历

3.1后序遍历概念

后序遍历(LRD)是二叉树遍历的一种,也叫做后根遍历、后序周游,可记做左右根。后序遍历有递归算法和非递归算法两种。在二叉树中,先左后右再根,即首先遍历左子树,然后遍历右子树,最后访问根结点。

3.2后序遍历习题

二叉树的后序遍历 。OJ链接

/*** 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 postorderTraversal(TreeNode root) {List list = new ArrayList<>();if (root == null) {return list;}List leftTree = postorderTraversal(root.left);list.addAll(leftTree);List rightTree = postorderTraversal(root.right);list.addAll(rightTree);list.add(root.val);return list;}
}

思路:子问题思路:每次都new一个新的list 再每一次递归时将他们直接存入list中,利用循环递归的方法来解决前序遍历法。

感谢各位读者的阅读,本文章有任何错误都可以在评论区发表你们的意见,我会对文章进行改正的。如果本文章对你有帮助请动一动你们敏捷的小手点一点赞,你的每一次鼓励都是作者创作的动力哦!😘

相关内容

热门资讯

电动自行车后轮轴承怎么拆,拆装... 电动自行车后轮轴承怎么拆目录电动自行车后轮轴承怎么拆拆装电动车后轮及轴承视频教程电动车后轮轴承怎么拆...
奇葩说六季冠军分别是谁,奇葩说... 奇葩说六季冠军分别是谁目录奇葩说六季冠军分别是谁奇葩说第一届冠军是谁?
移动有什么套餐流量多,中国移动... 移动有什么套餐流量多目录移动有什么套餐流量多中国移动流量套餐有哪些?移动有什么流量多的套餐吗?移动有...
蓝桥杯刷题冲刺 | 倒计时20... 作者:指针不指南吗 专栏:蓝桥杯倒计时冲刺 🐾马上就要蓝...
标婷维e乳可以擦脸吗,标婷维生... 标婷维e乳可以擦脸吗目录标婷维e乳可以擦脸吗标婷维生素e乳可以擦脸吗标婷维生素E乳可以白天擦脸用吗?...
基于 Vite + Vue3 ... 方式一:手动完整引入(不推荐) 只需要在 main.js ...
临床决策曲线DCA如何解决预测... 临床决策曲线可以说解决了临床预测模型到临床应用的一个痛点。以前存在这样一个现象,一个预...
Gradio-Learning Gradio-Learning 文章目录Gradio-LearningInterface函数-展示单...
计算机共有几个等级证书,计算机... 计算机共有几个等级证书目录计算机共有几个等级证书计算机等级考试证书等级说明计算机有几个证书?计算机等...
举世闻名的近义词是什么,举世闻... 举世闻名的近义词是什么目录举世闻名的近义词是什么举世闻名的近义词是什么.举世闻名的近义词有哪些。举世...
杭州5号线运营时间,杭州地铁运... 杭州5号线运营时间目录杭州5号线运营时间杭州地铁运营时间2023最新地铁早上几点开杭州杭州5号线地铁...
广西十三鹰有多少兄弟 极速百科... 广西十三鹰有多少兄弟目录广西十三鹰有多少兄弟广西十三鹰有多少兄弟广西河池巴马那桃新组成的社团、新一代...
读《大话并发》记录 线程和进程 我理解的进程就是处于运行状态的应用程序,例如:qq是一个应用...
法线贴图的计算方式 大家好,我是阿赵。 之前介绍了光照模型相关的一些知识,包括了MatCap...
微前端(无界) 前言:微前端已经是一个非常成熟的领域了,但开发者不管采用哪个现有方案&#...
Mybatis的课程总结  1.mybatis Mybatis主要是对代码进行少写,分别加入核心配置文件和ma...
北京八维学校是属于什么性质的,... 北京八维学校是属于什么性质的目录北京八维学校是属于什么性质的八维学校是一所怎样的学校?北京八维研修学...
atm奴是什么,ATM奴是什么... atm奴是什么目录atm奴是什么ATM奴是什么意思atm奴给的钱会追回吗atm奴是什么 ATM...
肇庆通报交警队长儿子酒驾逃逸并... 本篇文章极速百科给大家谈谈肇庆通报交警队长儿子酒驾逃逸并指使他人作伪证:其...,以及肇庆交警大队队...
瓢虫吃什么食物(七星瓢虫吃什么... 本篇文章极速百科给大家谈谈瓢虫吃什么食物,以及七星瓢虫吃什么食物对应的知识点,希望对各位有所帮助,不...
学习笔记-架构的演进之服务网格... 文章目录前言通信的成本第一阶段第二阶段第三阶段第四阶段第五阶段总结附 前言 Kubernetes 为...
传输层之TCP协议 传输层协议 端到端之间的传输,重点关注的是起点和终点。 TCP协议报文格式 源...
晶锐怎么样-车主点评-真实评价... 今天给各位分享晶锐怎么样-车主点评-真实评价-口碑的知识,其中也会对晶锐车型进行解释,如果能碰巧解决...
2022十大最省油的车排行榜,... 今天给各位分享2022十大最省油的车排行榜,家用油耗最低的车排行榜的知识,其中也会对最省油的家轿车排...
20岁生日说说经典句,二十岁生... 20岁生日说说经典句目录20岁生日说说经典句二十岁生日文案高级 20岁生日成熟点的说说20岁的生日适...
战时管制是什么(战时军事管制)... 本篇文章极速百科给大家谈谈战时管制是什么,以及战时军事管制对应的知识点,希望对各位有所帮助,不要忘了...
Vue组件基础 1,单文件组件Vue单文件组件(又名.vue 简称SFC)...
【Django 网页Web开发... 目录1. 安装第三方模块2. ORM2.1 自己手动创建数据库2.2 django连接数据库2.3 ...
皮燕子是什么(皮燕子是什么动物... 本篇文章极速百科给大家谈谈皮燕子是什么,以及皮燕子是什么动物对应的知识点,希望对各位有所帮助,不要忘...
塑胶跑道的主要材料(塑胶跑道材... 今天给各位分享塑胶跑道的主要材料的知识,其中也会对塑胶跑道材料是由什么组成的进行解释,如果能碰巧解决...