数据结构之顺序存储的二叉树

1,266 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情

顺序存储的二叉树

顺序存储二叉树的概念: 以数据存储来卡你,数组存储方式和树的存储方式是可以相互转换的,即数组可以转换为树,树也可以转换为数组

那么在对于顺序存储二叉树,我们就可以利用数组的顺序存储的特点,用数组来实现二叉树的顺序存储

二叉树顺序存储是二叉树的一种存储方式。二叉树的顺序存储就是用一组连续的存储单元spm=1001.2101.3001.7020)存放二又树中的结点元素,一般按照二叉树结点自上向下、自左向右的顺序存储。使用此存储方式,结点的前驱和后继不一定是它们在逻辑上的邻接关系,非常适用于满二又树和完全二又树。 在这里插入图片描述

概述:顺序存储使用数组的形式实现;由于非完全二叉树会导致数组中出现空缺,有的位置不能填上数字,所以顺序存储二叉树通常情况下只考虑完全二叉树

原理: 顺序存储在数组中是按照第一层第二层一次往下存储的,遍历方式也有先序遍历、中序遍历、后续遍历

性质

  • 1、顺序二叉树通常只考虑完全二叉树

  • 2、第n个节点的左子节点为 2 * n + 1

  • 3、第n个元素的右子节点为 2 * n + 2

  • 4、第n个元素的父节点为 (n - 1) / 2

  • 5、n:表示二叉树中的第几个元素(按0开始编号)

代码实现

  • 树类
public class ArrayBinaryTree {

    int[] data;

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

    //重载先序遍历方法,不用每次传参数了,保证每次从头开始
    public void frontShow() {
        frontShow(0);
    }

    //先序遍历
    public void frontShow(int index) {
        if (data == null || data.length == 0) {
            return;
        }
        //先遍历当前节点的内容
        System.out.print(data[index] + " ");
        //处理左子树:2*index+1
        if (2 * index + 1 < data.length) {
            frontShow(2 * index + 1);
        }
        //处理右子树:2*index+2
        if (2 * index + 2 < data.length) {
            frontShow(2 * index + 2);
        }
    }
}
  • 测试类
public class Demo {
    public static void main(String[] args) {
        int[] data = {1,2,3,4,5,6,7};
        ArrayBinaryTree tree = new ArrayBinaryTree(data);
        //先序遍历
        tree.frontShow(); //1 2 4 5 3 6 7
    }
}