说明
从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组。
顺序存储二叉树的特点
1.顺序二叉树通常只考虑完全二叉树
2.第n个元素的左子节点为 2 * n + 1
3.第n个元素的右子节点为 2 * n + 2
4.第n个元素的父节点为 (n-1) / 2
5.n : 表示二叉树中的第几个元素(按0开始编号,如图所示)
图解
代码实现
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] arr={1,2,3,4,5,6,7};
//前序遍历
System.out.print("前序遍历:");
BinarySearch binarySearch=new BinarySearch(arr);
binarySearch.preOrderSearch();
System.out.println();
//中序遍历
System.out.print("中序遍历:");
binarySearch.indixOrderSearch(0);
System.out.println();
//后序遍历
System.out.print("后序遍历:");
binarySearch.postOrderSearch(0);
}
class BinarySearch{
private int[] arr;
public BinarySearch(int[] arr) {
this.arr = arr;
}
//重载preOrderSearch
public void preOrderSearch(){
preOrderSearch(0);
}
public void preOrderSearch(int index){
if (arr==null||arr.length==0){
System.out.println("数组为空");
}
System.out.print(arr[index] + " ");
if (index*2+1<arr.length){
preOrderSearch(index*2+1);
}
if (index*2+2<arr.length){
preOrderSearch(index*2+2);
}
}
//中序遍历
public void indixOrderSearch(int index){
if (arr==null||arr.length==0){
System.out.println("数组为空");
}
if (index*2+1<arr.length){
indixOrderSearch(index*2+1);
}
System.out.print(arr[index] + " ");
if (index*2+2<arr.length){
indixOrderSearch(index*2+2);
}
}
public void postOrderSearch(int index){
if(arr==null||arr.length==0){
System.out.println("数组为空");
}
if (index*2+1<arr.length){
postOrderSearch(index*2+1);
}
if (index*2+2<arr.length){
postOrderSearch(index*2+2);
}
System.out.print(arr[index]+" ");
}
}
运行结果