李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
数据结构和算法学习--二叉树遍历应用实例(前序,中序,后序)
Leefs
2020-02-08 PM
1453℃
0条
# 数据结构和算法学习--二叉树遍历应用实例(前序,中序,后序) ### **应用实例和说明和思路** ![28.二叉树遍历01.png][1] **分析二叉树的前序,中序,后续的遍历步骤** > 1. 1.创建一颗二叉树 > > 2. 2.前序遍历 > > 2.1 先输出当前节点(初始的时候是root节点) > > 2.2 如果左子节点不为空,则递归继续前序遍历 > > 2.3 如果右子节点不为空,则递归继续前序遍历 > > 3. 3.中序遍历 > > 3.1 如果当前节点的左子节点不为空,则递归中序遍历 > > 3.2 输出当前节点 > > 3.3 如果当前节点的右子节点不为空,则递归中序遍历 > > 4. 4.后序遍历 > > 4.1 如果当前节点的左子节点不为空 ,则递归后序遍历 > > 4.2 如果当前节点的右子节点不为空,则递归后序遍历 > > 4.3 输出当前节点 **代码实现** ```java public class BinaryTreeDemo { public static void main(String[] args) { //先需要创建一颗二叉树 BinaryTree binaryTree = new BinaryTree(); //创建需要的节点 HeroNode root = new HeroNode(1,"宋江"); HeroNode node2=new HeroNode(2,"吴用"); HeroNode node3=new HeroNode(3,"卢俊义"); HeroNode node4=new HeroNode(4,"林冲"); HeroNode node5=new HeroNode(5,"关胜"); //说明,我们先手动创建该二叉树,后面我们学习递归的方式创建二叉树 root.setLeft(node2); root.setRight(node3); node3.setRight(node4); node3.setLeft(node5); binaryTree.setRoot(root); //测试 System.out.println("前序遍历"); binaryTree.preOrder(); System.out.println("中序遍历"); binaryTree.infixOrder(); System.out.println("后序遍历"); binaryTree.postOrder(); } } class BinaryTree{ private HeroNode root; public void setRoot(HeroNode root){ this.root=root; } //前序遍历 public void preOrder(){ if(this.root != null){ this.root.preOrder(); }else{ System.out.println("二叉树为空,无法遍历"); } } //中序遍历 public void infixOrder(){ if(this.root != null){ this.root.infixOrder(); }else{ System.out.println("二叉树为空,无法遍历"); } } //后序遍历 public void postOrder(){ if(this.root != null){ this.root.postOrder(); }else{ System.out.println("二叉树为空,无法遍历"); } } } //先创建HeroNode结点 class HeroNode{ private int no; private String name; private HeroNode left;//默认null private HeroNode right;//默认null public HeroNode(int no,String name){ this.no=no; this.name=name; } public int getNo() { return no; } public void setNo(int no) { this.no = no; } public String getName() { return name; } public void setName(String name) { this.name = name; } public HeroNode getLeft() { return left; } public void setLeft(HeroNode left) { this.left = left; } public HeroNode getRight() { return right; } public void setRight(HeroNode right) { this.right = right; } @Override public String toString() { return "HeroNode{" + "no=" + no + ", name='" + name + '\'' + '}'; } //编写前序遍历的方法 public void preOrder(){ System.out.println(this);//先输出父节点 //递归向左子树前序遍历 if(this.left!=null){ this.left.preOrder(); } //递归向右子树前序遍历 if(this.right != null){ this.right.preOrder(); } } //中序遍历 public void infixOrder(){ //递归向左子树中序遍历 if(this.left != null){ this.left.infixOrder(); } //输出父结点 System.out.println(this); //递归向右子树中序遍历 if(this.right != null){ this.right.infixOrder(); } } //后序遍历 public void postOrder(){ if(this.left != null){ this.left.postOrder(); } if(this.right != null){ this.right.postOrder(); } System.out.println(this); } } ``` [1]: https://lilinchao.com/usr/uploads/2020/02/2528599778.png
标签:
数据结构和算法
,
二叉树
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/576.html
上一篇
数据结构和算法学习--树结构的基础部分
下一篇
数据结构和算法学习--二叉树删除节点
取消回复
评论啦~
提交评论
栏目分类
随笔
2
Java
326
大数据
226
工具
31
其它
25
GO
40
标签云
Thymeleaf
MyBatis
Quartz
Golang基础
链表
CentOS
队列
随笔
SQL练习题
DataX
数据结构
JavaScript
MyBatisX
国产数据库改造
Sentinel
排序
Azkaban
Kafka
SpringCloud
Nacos
GET和POST
Http
算法
Spark Core
VUE
稀疏数组
Hbase
ajax
Map
Scala
友情链接
申请
范明明
庄严博客
Mx
阿阳热爱前端
陶小桃Blog