李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
数据结构和算法学习--二叉树遍历应用实例(前序,中序,后序)
Leefs
2020-02-08 PM
3765℃
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
大数据
229
工具
35
其它
25
GO
48
NLP
8
标签云
RSA加解密
稀疏数组
CentOS
机器学习
NIO
Eclipse
Livy
pytorch
Scala
Flume
正则表达式
SQL练习题
数学
VUE
Hadoop
Golang基础
Map
Sentinel
Zookeeper
栈
字符串
散列
递归
Netty
SpringCloud
JavaWeb
Python
设计模式
微服务
锁
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞