二叉树顺序存储-实现前序中序后序遍历

一、顺序存储二叉树简介

二叉树的存储结构有两种,分别为顺序存储和链式存储。

二叉树的顺序存储,指的是使用顺序表(数组)存储二叉树。只有完全二叉树才可以使用顺序表存储。因此,如果我们想顺序存储普通二叉树,需要提前将普通二叉树转化为完全二叉树。

从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组,逻辑示意图如下

二叉树顺序存储-实现前序中序后序遍历_第1张图片

二、代码实现

要求:给定已知数组{1,2,3,4,5,6,7},要求以二叉树前序,中序,后续遍历的方式进行遍历,达到如下结果。
前序遍历:1,2,4,5,3,6,7
中序遍历:4,2,5,1,6,3,7
后序遍历:4,5,2,6,7,3,1

package tree;

public class ArrayBinaryTreeTest {
    public static void main(String[] args){

        int[] arr = {1,2,3,4,5,6,7};
        ArrayBinaryTree tree = new ArrayBinaryTree(arr);
        //根节点下标从0开始
        //前序遍历
        System.out.println("--------前序遍历--------");
        tree.preOrder(0);

        //中序遍历
        System.out.println("--------中序遍历--------");
        tree.infixOrder(0);

        //后序遍历
        System.out.println("--------后序遍历--------");
        tree.postOrder(0);

    }
}

//创建一个顺序存储二叉树
class ArrayBinaryTree{
    private int[] arr;//

    public ArrayBinaryTree(int[] arr) {
        this.arr = arr;
    }

    public void preOrder(int index){
        if (arr == null||arr.length==0){
            System.out.println("数组为空,无法前序遍历!!!");
        }
        //当前元素
        System.out.printf("arr[%d]=%d\n",index,arr[index]);
        //向左递归
        if ((2*index+1)<arr.length){
            preOrder(2*index+1);
        }
        //想右递归
        if ((2*index+2)<arr.length){
            preOrder(2*index+2);
        }
    }

    public void  infixOrder(int index){
        if (arr == null||arr.length==0){
            System.out.println("数组为空,无法中序遍历!!!");
        }
        //向左递归
        if((2*index+1)<arr.length){
            infixOrder(2*index+1);
        }
        //当前元素
        System.out.printf("arr[%d]=%d\n",index,arr[index]);
        //向右递归
        if ((2*index+2)<arr.length){//防止遍历途中下标越界
            infixOrder(2*index+2);
        }

    }

    //后序遍历
    public void postOrder(int index){
        if (arr == null || arr.length==0){
            System.out.println("数组为空,无法后序遍历");
        }
        //向左递归
        if ((2*index+1) <arr.length){
            postOrder(2*index+1);
        }

        //向右递归
        if ((2*index+2) <arr.length){
            postOrder(2*index+2);
        }

        //当前元素
        System.out.printf("arr[%d]=%d\n",index,arr[index]);

    }
}


结果截图
二叉树顺序存储-实现前序中序后序遍历_第2张图片

你可能感兴趣的:(二叉树,算法,数据结构,数组)