顺序存储二叉树特点:
将二叉树存储在一个数组中,通过下标有如下规律。
1.只考虑完全二叉树
2.第n个节点的左子节点为2*n+1
3.第n个节点的右子节点为2*n+2
4.第n个节点的父节点为(n-1)/2
package day18;
//顺序存储二叉树遍历(堆排序),将arr数组存储在二叉树中
public class arrBinaryDemo {
public static void main(String[] args) {
int [] arr={1,2,3,4,5,6,7};
ArrBinarytree arrBinarytree = new ArrBinarytree(arr);
// arrBinarytree.preorder();
arrBinarytree.arrinfixorder(0);
}
}
//编写一个树
class ArrBinarytree{
private int[] arr;
public ArrBinarytree(int[] arr) {
this.arr = arr;
}
// 重载perorder,使调用的代码更加简单。参数0直接写死在方法里面
public void preorder(){
this.preorder(0);
}
//前序遍历方法
public void preorder(int index){ //index为数组的下标
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 arrinfixorder(int index){
// 判断数组是否为空
if (arr==null||arr.length==0){
System.out.println("数组为空");
}
//中序遍历顺序为左 ---中----右
if (index*2+1<arr.length){
arrinfixorder(index*2+1);
}
System.out.println(arr[index]);
if (index*2+2<arr.length){
arrinfixorder(index*2+2);
}
}
}