数据结构之二叉树前序,中序,后序遍历图解
先来个图,方便理解
如果是前序遍历,那么,遍历结果就是:1,2,4,5,3,6,7
如果是中序遍历,那么,遍历结果就是:4,2,5,1,6,3,7
如果是后序遍历,那么,遍历结果就是:4,5,2,6,7,3,1
嗯,这个结果不仅是我推算出来的,还是经过程序验证滴,如图
验证代码如下,额,其实还用了顺序存储二叉树的知识,这篇博客是我后面补充的
package cn.ycl.dataStructures.BinaryTree;
public class ArrBinaryTreeDemo {
public static void main(String[] args) {
int arr[] = { 1, 2, 3, 4, 5, 6, 7 };
arrBinaryTree tree = new arrBinaryTree(arr);
System.out.println("前序遍历...");
tree.preOrder(0);
System.out.println("中序遍历...");
tree.midOrder(0);
System.out.println("后序遍历...");
tree.afterOrder(0);
}
}
//编写一个arrBinaryTree,实现顺序存储二叉树
class arrBinaryTree{
private int arr[];
public arrBinaryTree(int[] arr) {
super();
this.arr = arr;
}
//编写一个方法,完成顺序存储二叉树的前序遍历
public void preOrder(int index) {
//如果数组为空,或者arr.length==0
if (arr==null || arr.length==0) {
System.out.println("数组为空,不能按照二叉树的前序遍历");
}
//输出当前这个元素
System.out.println(arr[index]);
//向左递归遍历
if (index*2+1<arr.length) {
preOrder(index*2+1);
}
//向右递归遍历
if (index*2+2<arr.length) {
preOrder(index*2+2);
}
}
//编写一个方法,完成顺序存储二叉树的中序遍历
public void midOrder(int index) {
//如果数组为空,或者arr.length==0
if (arr==null || arr.length==0) {
System.out.println("数组为空,不能按照二叉树的前序遍历");
}
//向左递归遍历
if (index*2+1<arr.length) {
midOrder(index*2+1);
}
//输出当前这个元素
System.out.println(arr[index]);
//向右递归遍历
if (index*2+2<arr.length) {
midOrder(index*2+2);
}
}
//编写一个方法,完成顺序存储二叉树的后序遍历
public void afterOrder(int index) {
//如果数组为空,或者arr.length==0
if (arr==null || arr.length==0) {
System.out.println("数组为空,不能按照二叉树的前序遍历");
}
//向左递归遍历
if (index*2+1<arr.length) {
afterOrder(index*2+1);
}
//向右递归遍历
if (index*2+2<arr.length) {
afterOrder(index*2+2);
}
//输出当前这个元素
System.out.println(arr[index]);
}
}