顺序存储二叉树的前中后序遍历

顺序存储二叉树的前、中、后序遍历

  • 概念
    什么是顺序存储二叉树?
    我们知道顺序存储对于树这种一对多的关系结构实现起来还是很困难的,但是二叉树是一种特殊的树,由于它的特殊性,使得用顺序存储结构也可以实现。
    二叉树的顺序存储结构就是用一维数组存储二叉树中的结点,并且结点的存储位置,也就是数组的下标要能体现节点间的逻辑关系(父子关系,左右兄弟关系)。
  • 顺序存储结构的特点:
  1. 顺序存储结构一般只考虑完全二叉树
  2. 二叉树中第n个元素的左子结点的数组下标为(2*n+1)
  3. 二叉树中第n个元素的右子结点的数组下标为(2*n+2)
  4. 第n个元素的父结点为(n-1)/2
  • 图示
    在这里插入图片描述
    ==注意:==二叉树中元素起始下标为0,为了和数组保持一致。
    我们以第二个元素为例,显然二叉树中,第二个元素为2,其下标 index=1 ,所以按照顺序存储的特点,其左子节点下标为(1*2 + 1)= 3,与图中所示的是一致的,其余元素我们就不再赘述。
  • 顺序存储二叉树的遍历
    需求:首先给定一个数组 {1,2,3,4,5,6,7},要求以二叉树的前、中,后、序遍历的方式进行遍历,根据上图,我们可以看出,前序遍历的结果应该是 [1,2,4,5,3,6,7],相信讲到这里我们已经可以写出其前序遍历的代码了,我在这里以前序遍历为例子,给大家展示一下代码,大家可以把剩下两种遍历方式也写出来,大同小异。
  • 代码展示
class ArrBinaryTree{
    int[] arr;

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

    /**
     * 顺序存储二叉树的遍历
     * @param index
     */
    public void preOrder(int index){
        if (arr.length == 0||arr == null){
            System.out.println("错误");
        }
        //输出结点
        System.out.print(arr[index] + "\t");

        //左递归
        if ((index*2 + 1) < arr.length){
            preOrder(index*2 + 1);
        }
        //右递归
        if ((index*2 + 2) < arr.length){
            preOrder(index*2 + 2);
        }
    }
}
  • 总结
    顺序存储的二叉树有很广泛的应用,八大排序算法中的堆排序就是一个典型例子,有兴趣的同学可以去看看。
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值