顺序存储二叉树的遍历
顺序存储的二叉树通常情况只考虑完全二叉树
第n个元素的左子节点是:2*n+1
第n个元素的右子节点是:2*n+2
第n个元素的父节点是:(n-1)/2
代码展示
package demo6;
public class ArrayBinaryTree {
int[] data;
public ArrayBinaryTree(int[] data){
this.data = data;
}
public void frontShow(){
frontShow(0);
}
//前序遍历
public void frontShow(int index){
if(data==null || data.length==0){
return;
}
//先遍历当前节点的内容
System.out.print(data[index]+" ");
//处理左子树:2*index+1
if(2*index+1<data.length){
frontShow(2*index+1);
}
//处理右子树:2*index+2
if(2*index+2<data.length){
frontShow(2*index+2);
}
}
public void midShow(){
midShow(0);
}
//中序遍历
public void midShow(int index){
if(data==null || data.length==0){
return;
}
//处理左子树:2*index+1
if(2*index+1<data.length){
midShow(2*index+1);
}
//遍历当前节点的内容
System.out.print(data[index]+" ");
//处理右子树:2*index+2
if(2*index+2<data.length){
midShow(2*index+2);
}
}
public void afterShow(){
afterShow(0);
}
//后序遍历
public void afterShow(int index){
if(data==null || data.length==0){
return;
}
//左子树遍历:2*index+1
if(2*index+1<data.length){
afterShow(2*index+1);
}
//右子树遍历:2*index+2
if(2*index+2<data.length){
afterShow(2*index+2);
}
//遍历当前节点的内容
System.out.print(data[index]+" ");
}
}
package demo6;
public class TestBinaryTree {
public static void main(String[] args) {
int[] data = new int[]{1,2,3,4,5,6,7};
ArrayBinaryTree tree = new ArrayBinaryTree(data);
//前序遍历
System.out.println("前序遍历:");
tree.frontShow();
//中序遍历
System.out.println();
System.out.println("中序遍历:");
tree.midShow();
//后序遍历
System.out.println();
System.out.println("后序遍历:");
tree.afterShow();
}
}