IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 顺序存储二叉树 [数据结构与算法][Java] -> 正文阅读

[数据结构与算法]顺序存储二叉树 [数据结构与算法][Java]

顺序存储二叉树(思路分析)

我们的顺序存储二叉树在堆排序中就会使用到

顺序存储二叉树的概念:

从数据存储的角度来看: 数组存储方式和树的存储方式之间可以相互转换, 也即是数组可以转换为树,树也可以转换为数组

  • 其实说白了: 顺序存储二叉树就是将我们的二叉树存储到一个数组中,就是将一个具体的二叉树存储到一个数组中, 这个时候有的人会说:那么我们将一个二叉树存储到了数组中之后这个结构还算是一个二叉树?
    • 这个时候我们将这个具体的二叉树存储到一个数组中之后遍历这个数组中的元素的时候不是按照数组遍历的方式进行遍历,而是按照我们的二叉树的方式进行一个遍历, 也就是虽然此时我们将这个具体的二叉树存储到了一个数组中 ,但是这个时候我们对这个数组操作的的时候不是按照数组的方式进行操作,而是按照二叉树的方式进行操作, 具体的如果将存储到数组中的元素按照二叉树的方式进行操作我们后面就会进行一个具体的讲解

数据是一个顺序存储结构, 所以我们将二叉树存储到数组中之后就称之为: 顺序存储二叉树

顺序存储二叉树图解(示例):

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ICRaNB5m-1667387594356)(E:\非凡英才\数据结构(java)]\数据结构图解\顺序存储二叉树图解.png)

具体代码实现顺序存储二叉树的要求:

  1. 将上面示例中的结点以数组的形式存放
  2. 要求在遍历的数组的时候仍然可以使用二叉树的前序,中序, 后序遍历的方式完成对结点的遍历

那么我们如何将这个数组中的元素使用二叉树的前序,中序,后序遍历的方式进行一个遍历?

  • 这里我们就来讲解一些对应的顺序存储二叉树的一些特点:
  1. 顺序存储二叉树通常只考虑完全二叉树
  2. 第n个元素的左子节点为2*n + 1
  3. 第n个元素的右子节点为2*n + 2
  4. 第n个元素的父节点为(n - 1)/2
    • n表示的是二叉树中的第几个元素,从0开始编号
      • 这里因为是使用数组进行了存储,在数组中元素是从0开始编号的(所以我们这里的规则其实就是根据数组的下标指定的规则)
    • 其实2,3,4三个特点我们也可以通过等比数列推导出来,或者我们使用画图法也可以很快就推导出我们数组中存储二叉树的特点

小结: 我们的二叉树, 尤其是满二叉树,很多时候我们可以使用等比数列来进行一个类比

补充:

那么我们前面说我们的顺序存储二叉树就是使用数组存储一个具体的二叉树, 那么我们一个单纯的数组是不是就等于也是一个顺序存储二叉树?

  • 其实不是的, 我们的顺序存储二叉树是一个底层使用数组实现的虚拟二叉树, 一个单纯的数组并不能看做是一个顺序存储二叉树, 必须要是数组作为底层的实现,并且配合上我们的顺序存储二叉树中的一些特有的方法(也就是要具有二叉树类的一些通用功能)封装而成的类,这样的类我们才能真正的称之为一个顺序存储二叉树
    • 如果一个数组中只是单纯的存储了一个二叉树中的元素,这个时候这个数组其实还是一个数组而已,但是如果我们将一个数组封装到一个类中, 并且这个类中还封装一些可以将这个数组中的元素以二叉树的形式操作的一些方法, 这个时候我们这个类就可以称之为是一个顺序存储二叉树了
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-11-05 00:49:39  更:2022-11-05 00:51:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 9:30:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码