上篇文章中介绍了二叉树的创建和遍历,其中遍历使用的是递归的方式。这篇文章我们介绍一下使用循环来实现对树的先序、中序、后序遍历。
如何创建二叉树我们在上篇文章已经介绍了,此处就不做过多阐述。
## 三种遍历方式
(1). 先序遍历
(2). 中序遍历
(3). 后序遍历
三种遍历方式,也就是遍历的顺序不一样。
先序遍历: "根左右"二叉树遍历算法 java二叉树遍历算法 java 二叉树遍历(二),遍历的顺序: 根节点->左节点->右节点。
中序遍历: "左根右",遍历的顺序: 左节点->根节点->右节点。
后序遍历: "左右根",遍历的顺序: 左节点->右节点->根节点。
由于该篇文章中使用的是循环来实现遍历,不是递归,所以我们需要来存储我们需要输出的节点,相信学习过数据结构的同学都知道树的存储输出可以使用pop二叉树遍历算法 java,push来实现,也就是使用栈来实现树的遍历。在java中可以使用来实现栈,详细的介绍可以看下类的源码。
### 先序遍历
/*
* 先序遍历二叉树: 根左右
*
* 使用循环
*
* @param node
*遍历的节点
/
void ile( node){
stack = new ();
stack.push(node);
;
while (!stack.()) {
= stack.pop();
.out.print(.data + " ");
if(. != null){
stack.push(.);
}
if (. != null) {
stack.push(.);
}
}
}
### 中序遍历
/*
* 中序遍历二叉树: 左根右
*
* 使用循环
*
* @param node
*遍历的节点
/
void le( node){
stack = new ();
= node;
while ( != null || !stack.()) {
while( != null){
stack.push();
= .;
}
if(!stack.()){
= stack.pop();
.out.print(.data + "");
//输出完当前节点后看看当前节点的右孩子是否存在,存在即让该节点的右孩子入栈,即上面说到的 根节点->右节点
= .;
}
}
}
### 后序遍历
/*
* 后序遍历二叉树: 左右根
*
* 使用循环
*
* @param node
*遍历的节点
/
void While( node){
stack = new ();
= null;
= node;
while ( != null || !stack.()) {
while( != null){
stack.push();
= .;
}
= stack.pop();
//当上一个访问的结点是右孩子或者当前结点没有右孩子则访问当前结点
while( != null && (. == null || . == )){
.out.print(.data + " ");
= ;
if(stack.()){
;
}
= stack.pop();
}
stack.push();
= .;
}
}
### 下载地址
## How to run code
1. 将代码clone到本地,使用导入代码,导入的时候项目的类型选择"git "。
2. 找到src/test/.java,右键 run as java .
##二叉树结构
## Run完之后结果如下: