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

本文深入探讨了二叉树的顺序存储结构,通过数组实现二叉树的存储,并详细解释了节点之间的数学关系,包括如何找到左子节点、右子节点和父节点。此外,还提供了Java代码示例,演示了如何进行前序遍历。

顺序存储结构

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

在这里插入图片描述

  • 顺序存储:使用线性表(数组)存储二叉树
    在这里插入图片描述
  • 链式存储:使用链表存储二叉树

在这里插入图片描述

在上篇文章:数据结构 - 树、二叉树及四种遍历解析实现

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


顺序存储的特点

以数组的方式存放二叉树,要完成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
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值