顺序二叉树只考虑完全二叉树
第n个元素的左子节点:2*n+1
第n个元素的右子节点:2*n+2
n为二叉树中的第几个元素(从0开始编号)
eg:数组为{1,2,3,4,5,6,7}
二叉树图为:
package tree;
public class ArrBinaryTreeAPP {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int[] arr={1,2,3,4,5,6,7};
ArrBinaryTree arrBinaryTree=new ArrBinaryTree(arr);
System.out.println("顺序存储二叉树前序遍历:");
arrBinaryTree.preOrder(0);
System.out.println("\n顺序存储二叉树中序遍历:");
arrBinaryTree.midOrder(0);
System.out.println("\n顺序存储二叉树后序遍历:");
arrBinaryTree.postOrder(0);
}
}
class ArrBinaryTree{
private int[] arr;
public ArrBinaryTree(int[] arr) {
this.arr=arr;
}
//前序遍历
public void preOrder(int index) {
if(arr.length==0||arr==null) {
System.out.println("数列为空");
return;
}
System.out.printf(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) {
if(arr.length==0||arr==null) {
System.out.println("数列为空");
return;
}
if((index*2+1)<arr.length) {
midOrder(index*2+1);
}
System.out.printf(arr[index]+" ");
if((index*2+2)<arr.length) {
midOrder(index*2+2);
}
}
//后序遍历
public void postOrder(int index) {
if(arr.length==0||arr==null) {
System.out.println("数列为空");
return;
}
if((index*2+1)<arr.length) {
postOrder(index*2+1);
}
if((index*2+2)<arr.length) {
postOrder(index*2+2);
}
System.out.printf(arr[index]+" ");
}
}
运行结果: