一、顺序存储结构

二叉树的顺序存储结构是指用一组地址连续的存储单元依次自上而下、自左至右存储完全二叉树上的结点元素,即将完全二叉树上编号为 i 的结点元素存储在一维数组下标为 i-1 的分量中。

依据二叉树的性质,完全二叉树和满二叉树采用顺序存储比较合适,树中结点的序号可以唯一地反映结点之间的逻辑关系,这样既能最大地节省存储了空间,又能利用数组元素的下标值确定结点在二叉树中的位置,以及结点之间的关系。

从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树可以转换成数组。

二、顺序存储二叉树的特点

1、顺序二叉树通常只考虑完全二叉树和满二叉树
2、 第n个元素的左子结点为 2 * n + 1
3、第n个元素的右子结点为 2 * n + 2
4、 第n个元素的父结点为 (n-1) / 2
n表示二叉树中的第几个元素,按0开始编号


例如,第一个元素2的左子结点为 21+1=3,即为第三个元素4;右子结点为 21+2=4,即为第四个元素5;父结点为(1-1) / 2=0,即为第零个元素1。

三、遍历顺序存储二叉树

package Tree;public class ArrayBinaryTree {public static void main(String[] args) {int[] arr= {1,2,3,4,5,6,7};ArrBinaryTree arrBinaryTree=new ArrBinaryTree(arr);System.out.println("顺序存储二叉树的前序遍历");arrBinaryTree.preOrder(0);System.out.println();System.out.println("顺序存储二叉树的中序遍历");arrBinaryTree.inOrder(0);System.out.println();System.out.println("顺序存储二叉树的后序遍历");arrBinaryTree.postOrder(0);System.out.println();}
}class ArrBinaryTree{int[] arr;//用于存储数据结点的数组public ArrBinaryTree(int[] arr) {//ArrBinaryTree构造函数this.arr=arr;}//顺序存储二叉树的前序遍历(根->左->右)public void preOrder(int index) {if(arr==null||arr.length==0) {//如果数组为空,或者数组长度为零无法遍历System.out.println("数组为空,不能执行二叉树的前序遍历");}System.out.printf(arr[index]+" ");//打印当前结点if((index*2+1)<arr.length) {//当前结点的左子结点没有越界则向左递归前序遍历preOrder(index*2+1);}if((index*2+2<arr.length)) {//当前结点的右子结点没有越界则向右递归前序遍历preOrder(index*2+2);}}//顺序存储二叉树的中序遍历(左->根->右)public void inOrder(int index) {if(arr==null||arr.length==0) {//如果数组为空,或者数组长度为零无法遍历System.out.println("数组为空,不能执行二叉树的中序遍历");}if((index*2+1)<arr.length) {//当前结点的左子结点没有越界则向左递归前序遍历preOrder(index*2+1);}System.out.printf(arr[index]+" ");//打印当前结点if((index*2+2<arr.length)) {//当前结点的右子结点没有越界则向右递归前序遍历preOrder(index*2+2);}}// 顺序存储二叉树的后序遍历(左->右->根)public void postOrder(int index) {if(arr==null||arr.length==0) {//如果数组为空,或者数组长度为零无法遍历System.out.println("数组为空,不能执行二叉树的中序遍历");}if((index*2+1)<arr.length) {//当前结点的左子结点没有越界则向左递归前序遍历preOrder(index*2+1);}if((index*2+2<arr.length)) {//当前结点的右子结点没有越界则向右递归前序遍历preOrder(index*2+2);}System.out.printf(arr[index]+" ");//打印当前结点}
}

运行结果:

顺序存储二叉树的前序遍历
1 2 4 5 3 6 7
顺序存储二叉树的中序遍历
2 4 5 1 3 6 7
顺序存储二叉树的后序遍历
2 4 5 3 6 7 1

二叉树的顺序存储结构相关推荐

  1. 数据结构(C语言版)——二叉树的顺序存储结构(代码版)

    一.代码 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math. ...

  2. (数据结构)二叉树的顺序存储结构

    二叉树的存储结构 二叉树的存储结构有两种,分别为顺序存储和链式存储,此篇文章介绍顺序存储 二叉树的顺序存储 二叉树的顺序存储,指的是使用顺序表(数组)存储二叉树 重点!!! 顺序存储只适用于完全二叉树 ...

  3. 二叉树的顺序存储结构C语言代码实现

    二叉树的顺序存储是指用一组地址连续的存储单元依次自上而下.自左至右存储完全二叉树上的节点元素,即将完全二叉树上的编号为i的结点元素存储在一维数组下摆为i-1的分量中. 依据二叉树的性质,完全二叉树和满 ...

  4. 二叉树的顺序存储结构------(C语言实现)

    上图所示的二叉树用顺序存储方式存为 结点 A B C D E 0 F 下标 0 1 2 3 4 5 6 以A结点为例:相当于一个一维数组啦 设A结点下标为i时 A的左子树下标为2*i +1,B就是 2 ...

  5. 理论基础 —— 二叉树 —— 顺序存储结构

    [顺序存储结构] 二叉树的顺序存储结构是用一维数组存储二叉树中的结点,并用结点的存储位置表示结点间的逻辑关系(父子关系) 由于二叉树本身不具有顺序关系,因此二叉树的顺序存储结构要解决的关键问题是如何利 ...

  6. 再谈二叉树(二叉树概念,二叉树的性质,二叉树的存储结构)

    树的概念 树的概念 树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合.把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的.它具有以下的特点 ...

  7. 数据结构与算法(6-2)二叉树的存储结构(顺序存储、链式存储)

    目录 一.二叉树的顺序存储 存储方式 总代码 二.二叉树的链式存储(二叉链表) 1.存储结构 2.创建二叉树 总代码 一.二叉树的顺序存储 存储方式 //树的顺序存储 typedef struct { ...

  8. 已知一棵完全二叉树存于顺序表sa中,sa.elem[1..sa.length]含结点值,试编写算法由此顺序存储结构建立该二叉树的二叉链表。

    已知一棵完全二叉树存于顺序表sa中,sa.elem[1-sa.length]含结点值,试编写算法由此顺序存储结构建立该二叉树的二叉链表. 分析:由二叉树的性质可知,一个下标为i的节点若有左子树,则其左 ...

  9. 二叉树(C语言实现)——顺序存储结构

    /*二叉树顺序存储结构一般仅适合于存储完全二叉树*/ #include<stdio.h> #include<stdlib.h> #include<math.h> # ...

最新文章

  1. 常识性概念图谱建设以及在美团场景中的应用
  2. Nlpir大数据知识图谱的落地指南
  3. linux vi 批量修改某类字符串
  4. 并归排序(看别人的看不懂,自己写了一个),排序思想是一样的
  5. Intel® Nehalem/Westmere架构/微架构/流水线 (6) - 读写操作Load/Store增强
  6. 神经网络绘图工具-总结
  7. java文件生成jar包_编译Java文件并生成jar包
  8. Matlab制作高分辨率点线图
  9. Java实现多文档文本编辑器
  10. ubuntu结束进程快捷键_ubuntu快捷键设置大全
  11. 金彩教育:提升产品标签的方法
  12. 2022新鲜出炉Android面试总结附真题+答案解析(京东、新东方、货拉拉...)
  13. 误差反向传播法小练习(鱼书)
  14. 深度学习基本模型浅析
  15. [C++]C++中的延时方法总结
  16. 怎么用计算机作word文档,电脑上怎么用Word文档
  17. 计算机技术在中医药中的应用,计算机药物虚拟筛选技术在中医药领域中的应用前景...
  18. DDR3 controller 之储存器介绍
  19. 产品经理常见的概念:蝴蝶效应、马太效应
  20. Making Convolutional Networks Shift-Invariant Again阅读笔记

热门文章

  1. 分治法的概念以及应用
  2. 基于客户端用户行为记录的网站可用性分析工具研究
  3. 在linux下安装mplayer
  4. Vue第一周复习总结
  5. 现在入电商创业有点晚了,不行了
  6. Oracle RAC+ASM 数据库实时同步
  7. 关于 Visual Studio 无法卸载/无法下载/无法更新的解决办法
  8. 老滚5初始化python失败_五分钟学会怎么用python做一个简单的贪吃蛇
  9. There was an error parsing `Gemfile`: (<unknown>): could not find expected ‘:‘ while scanning a simp
  10. linux ntp同步硬件时间同步,linux时钟同步操作案例