数据结构 – 解析二叉树的顺序存储

  • Post author:
  • Post category:其他




顺序存储结构

二叉树的存储结构可以分为两种:

在这里插入图片描述

  • 顺序存储:使用线性表(数组)存储二叉树

    在这里插入图片描述
  • 链式存储:使用链表存储二叉树

在这里插入图片描述

在上篇文章:

数据结构 – 树、二叉树及四种遍历解析实现

使用链式存储二叉树,这篇完成顺序存储




顺序存储的特点

以数组的方式存放二叉树,要完成4种遍历方式,需要数组与树结点存在对应关系

顺序存储二叉树的特点

  • 顺序二叉树通常只考虑完全二叉树
  • 第n个元素的左子结点为

    2 * n + 1
  • 第n个元素的右子结点为

    2 * n + 2
  • 第n个元素的父结点为

    (n - 1) / 2

n表示数组的下标,对应二叉树的第几个元素

在这里插入图片描述

如2,是数组下标1,左子结点为

2*1+1=3

,数组下标为3的元素4,右子结点为

2*1+2=4

,数组下标为4的元素5

当然,叶子结点不存在子结点,即数组下标越界




Java实现顺序存储

使用数组存储二叉树数据

前序遍历:先输出当前元素,再遍历左子树,最后遍历右子树

package com.company.tree;

/**
 * 顺序存储二叉树:用数组存储二叉树
 */
public class ArrBinaryTreeDemo {

    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6,7};
        ArrBinaryTree tree = new ArrBinaryTree(arr);

        tree.preOrder();
    }
}

/**
 * 实现顺序存储二叉树
 */
class ArrBinaryTree{
    private int[] arr;

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

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

    /**
     * @param index 数组的下标
     * 顺序存储二叉树的前序遍历
     */
    public void preOrder(int index){
        //如果数组为空或者是空数组
        if (arr == null || arr.length == 0){
            System.out.println("=== 数组为空 ===");
        }
        //输出当前元素
        System.out.print(arr[index]+" ");
        //向左递归
        if ((index * 2 + 1) < arr.length){
            preOrder(index * 2 + 1);
        }
        //向右递归
        if ((index * 2 + 2) < arr.length){
            preOrder(index * 2 + 2);
        }
    }
}

二叉树

1,2,3,4,5,6,7

前序遍历结果为

1,2,4,5,3,6,7


在这里插入图片描述



版权声明:本文为key_768原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。