从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组,看下面的示意图。

顺序二叉树有两个要求:

  • 1.上图的二叉树结点,以数组的方式来存放
  • 2.要求在遍历数组时,仍然可以以前序、中序、后序的方式完成节点的遍历

顺序二叉树的特点:

  • 1.顺序二叉树通常只考虑完全二叉树
  • 2.第n个元素的左子节点为2*n+1
  • 3.第n个元素的右子节点为2*n+2
  • 4.第n个元素的父节点为(n一1)/2
  • 5.n:表示二叉树中的第几个元素(按0开始编号 如图所示)
    代码实现:
public class ArrBinaryTreeDemo {public static void main(String[] args) {int[] arr = { 1, 2, 3, 4, 5, 6, 7 };//创建一个 ArrBinaryTreeArrBinaryTree arrBinaryTree = new ArrBinaryTree(arr);arrBinaryTree.preOrder(); // 1,2,4,5,3,6,7}
}
//编写一个ArrayBinaryTree, 实现顺序存储二叉树遍历
class ArrBinaryTree {private int[] arr;//存储数据结点的数组public ArrBinaryTree(int[] arr) {this.arr = arr;}//重载preOrderpublic void preOrder() {this.preOrder(0);}//编写一个方法,完成顺序存储二叉树的前序遍历/*** @param index 数组的下标*/public void preOrder(int index) {//如果数组为空,或者 arr.length = 0if(arr == null || arr.length == 0) {System.out.println("数组为空,不能按照二叉树的前序遍历");}//输出当前这个元素System.out.println(arr[index]);//向左递归遍历if((index * 2 + 1) < arr.length) {preOrder(2 * index + 1 );}//向右递归遍历if((index * 2 + 2) < arr.length) {preOrder(2 * index + 2);}}
}

顺序二叉树(基于数组存储树结点)相关推荐

  1. 线索二叉树(基于链表存储树结点)

    有以下场景 如果使用中序遍历,那么得到的顺序是:HDIBEAFCG,可以得知A的前驱结点为E,后继结点为F.但是,这种关系的获得是建立在完成遍历后得到的.如果我们每次想得到某个节点的前驱或者后继,都要 ...

  2. 顺序二叉树---实现数组的二叉树前序遍历输出

    特点: 1.顺序二叉树只考虑完全二叉树 2.第n个元素的左子节点为2*n+1 3.第n个元素的右子节点为2*n+2 4.第n个元素的父节点为(n-1)/2 代码: /** 给你一个数组,要求以二叉树前 ...

  3. DS二叉树--二叉树之数组存储

    二叉树可以采用数组的方法进行存储,把数组中的数据依次自上而下,自左至右存储到二叉树结点中,一般二叉树与完全二叉树对比,比完全二叉树缺少的结点就在数组中用0来表示.,如下图所示 从上图可以看出,右边的是 ...

  4. Python数据结构之树形结构——数组存储

    Python数据结构之树形结构--数组存储 树:一种非线性结构,主要使用链表来存储,也可以使用数组存储. 本代码使用两种数组 元素数组:0,6,3,5,4,7,8,9,2 由于 0 索引不存储元素,所 ...

  5. Java数据结构与算法---栈(数组存储)

    今天用Java实现了数据结构中的栈,学会了操纵栈的一系列方法.关于栈的相关内容这里不做介绍,我只是将自己实现的代码分享出来,记录自己的学习进度同时希望能对其他朋友具有借鉴作用. 以下是用数组存储实现栈 ...

  6. 有十五个数按由大到小顺序存放在一个数组中_数据结构基础 (代码效率优化, 线性表, 栈, 队列, 数组,字符串,树和二叉树,哈希表)...

    作者:张人大 代码效率优化 复杂度 -- 一个关于输入数据量n的函数 时间复杂度 -- 昂贵 与代码的结构设计有着紧密关系 一个顺序结构的代码,时间复杂度是O(1), 即任务与算例个数 n 无关 空间 ...

  7. 二叉树的存储方式【顺序储存(数组)、链式存储、邻接表存储等】

    其他二叉树知识!二叉树知识汇总 目录 前言: 1.顺序存储结构 2.链式存储结构 3.二维数组直接存储 4.邻接表存储 前言: 顺序存储和链式存储是经典讲解的内容,本文做简单理论介绍,而对于后两种:二 ...

  8. 大话数据结构13:二叉树 数组存储

    基础介绍 对于完全二叉树 父节点位置与子节点位置 i 与 2*i +1 前序遍历 打印函数在前 中序遍历 打印函数在中 后序遍历 打印函数在后 #include "stdio.h" ...

  9. 简单实现并查集(基于数组和基于树)

    并查集: 并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中.这一类问题近几 ...

最新文章

  1. 清华浙大年度学生最高奖,都颁向量子物理
  2. 【codevs1368】【BZOJ1034】泡泡堂BNB,贪心思路
  3. [LibTorch Linux] 各版本 LibTorch 下载
  4. java hadoop makefile_makefile高级用法--make 的运行
  5. C语言-用指针实现内存动态分配
  6. Install and Use SourceMonitor in Windows7
  7. linux内核态删除文件函数,初探Linux内核态——通过proc文件系统作快速问题定位...
  8. python创意小作品代码-超全代码详解 Python 制作精美炫酷图表教程
  9. 基于Web在线考试系统的设计与实现
  10. 【python中级】 ico图标生成器
  11. 修改 QQ 任务栏托盘区小图标和等级图标
  12. 有没有集工作记录、项目时间线于一身的便签软件?
  13. hiber+spring继续找bug
  14. 数据结构(1)—— 数据结构的三大结构
  15. Solr Replication
  16. Lua热更原理以及加载规则
  17. 白大脑比超级计算机还,巨金怪 - 神奇宝贝百科,关于宝可梦的百科全书
  18. AnyConnect苹果IOS系统Iphone手机的设置教程
  19. 安卓 自定义吐司样式 ,适配Android Pie
  20. 使用ResNet18实现CIFAR10数据集的训练

热门文章

  1. Spring Cloud中,Eureka常见问题总结
  2. BZOJ1555 KD之死
  3. 为WPF和Silverlight的Grid添加边框线
  4. 数据采集中的采样率、缓冲区大小以及,每通道采样数之间的关系
  5. 吴恩达 coursera ML 第十六课总结+作业答案
  6. 机器学习导论(张志华):渐近性质
  7. 编程方法学17:多维数组
  8. 正则化与L0、L1、L2范数祥解
  9. Python的C/C++扩展
  10. vivado环境下用Verilog语言实现编码器