从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组。
顺序存储二叉树特点
(1)顺序二叉树通常只考虑完全二叉树
(2)第n个元素的左子节点为 2 * n + 1
(3)第n个元素的右子节点为 2 * n + 2
(4)第n个元素的父节点为 (n-1) / 2
(5)n : 表示二叉树中的第几个元素(按0开始编号)
例子:给定数组 {1,2,3,4,5,6,7},使用树的遍历方式遍历数组
public static void main(String[] args) { int[] arr={1,2,3,4,5,6,7}; SeqStoreTree seqStoreTree=new SeqStoreTree(arr); seqStoreTree.prePrint(0);//1,2,4,5,3,6,7 seqStoreTree.midPrint(0);//4,2,5,1,6,3,7 seqStoreTree.postPrint(0);//4,5,2,6,7,3,1 } static class SeqStoreTree{ private int[] arr; public SeqStoreTree(int[] arr){ this.arr=arr; } //前序遍历 public void prePrint(int index){ if(this.arr==null||index<0){ System.out.println("数组为空"); return; } System.out.println(arr[index]); //递归遍历左节点 if(2*index+1<arr.length){ prePrint(2*index+1); } //递归遍历右节点 if(2*index+2<arr.length){ prePrint(2*index+2); } } //中序遍历 public void midPrint(int index){ if(this.arr==null||index<0){ System.out.println("数组为空"); return; } //递归遍历左节点 if(2*index+1<arr.length){ midPrint(2*index+1); } System.out.println(arr[index]); //递归遍历右节点 if(2*index+2<arr.length){ midPrint(2*index+2); } } //后序遍历 public void postPrint(int index){ if(this.arr==null||index<0){ System.out.println("数组为空"); return; } //遍历左节点 if(2*index+1<arr.length){ postPrint(2*index+1); } //遍历右节点 if(2*index+2<arr.length){ postPrint(2*index+2); } System.out.println(arr[index]); } }