我所知道的数据结构之顺序存储二叉树

前一篇我们学数据结构:树,那么这一篇学习的是的:顺序存储二叉树

一、什么是顺序存储二叉树

首先先来看看概念:什么是顺序存储二叉树

从数据存储来看:[数组]存储方式[树]的存储方式可以互相转换,即是数组可以转换为树、树也可以转换为数组

根据这样的特性就会发现一些特点

image.png
image.png

顺序存储通常考虑完全二叉树!那么什么是完全二叉树呢?

二、什么是完全二叉树

我们首先回顾一下什么是二叉树

简单地理解,满足以下两个条件的树就是二叉树:

  1. 本身是有序树;
  2. 树中包含的各个节点的度不能超过 2,即只能是 0、1 或者 2

image.png

上一篇文章我们提到在二叉树中,还有两个特殊的类型:满二叉树与完全二叉树

[满二叉树]:除了叶子节点外,所有节点都有两个节点

image.png

[完全二叉树]:除了最后一层以外,其他层节点个数都达到最大,并且最后一层的叶子节点向左排列

image.png

三、通过示例认识顺序存储二叉树

示例一:数组arr{1,2,3,4,5,6,7},要求以二叉树前序遍历进行遍历,遍历结果为1,2,4,5,3,6,7

我们定义顺序存储二叉树:ArrBinaryTree

//定义顺序存储二叉树
class ArrBinaryTree{

    private int[] arr;//存储数据结点的数组

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

    public void preOrder(){
        this.preOrder(0);
    }

    /**
     * 编写二叉树前序遍历方法
     * 二叉树前序遍历:先输出父节点,再遍历左子树和右子树
     * 第n个元素的左节点为 2 * n + 1
     * 第n个元素的右节点为 2 * n + 2
     */
    private void preOrder(int index){
        //判断数组是否为空
        if(arr == null || arr.length == 0){
            System.out.println("数组为空,不能进行二叉树前序遍历");
            return;
        }
        //输出当前元素
        System.out.println(arr[index]);

        //左递归 防止数组越界
        if((2 * index + 1) < arr.length){
            preOrder((2 * index + 1));
        }

        //右递归 防止数组越界
        if((2 * index + 2) < arr.length){
            preOrder((2 * index + 2));
        }

    }
}

我们进行使用[二叉树前序遍历]看看是否输出{1,2,4,5,3,6,7}

public class ArrBinaryTreeDemo {

    public static void main(String[] args) {

        int[] arr = { 1, 2, 3, 4, 5, 6, 7};

        //创建一个顺序存储二叉树
        ArrBinaryTree arrTree = new ArrBinaryTree(arr);
        arrTree.preOrder();
    }
}
//运行结果如下://1 2 4 5 3 6 7
加强练习

结合前一篇文章,根据中序、后序的规则完成对数组进行二叉树中序、后续遍历的方式代码编写

四、顺序存储二叉树应用实例

八大排序算法中的堆排序、就会使用到顺序存储二叉树,关于堆排序会放在后面的文章中进行讲解与分享。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值