树结构之顺序存储二叉树

从数据存储来看,数组存储方式的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组。

顺序存储二叉树特点

(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]);
    }
}
发布了69 篇原创文章 · 获赞 2 · 访问量 4481

猜你喜欢

转载自blog.csdn.net/zuodaoyong/article/details/104125482