【白话树】之 树的基本知识、存储结构和二叉树转换

news2024/9/21 18:45:42

快速导航

  • 一、树的基础概念
    • 1. 树的定义:
    • 2. 树的特点:
    • 3. 树的常用术语:
    • 4. 树的简单分类:
  • 二、树的存储结构
    • 1.顺序存储
      • 1) 双亲表示法
      • 2) 孩子表示法
      • 3) 双亲孩子表示法
    • 2.链式存储
      • 1) 孩子链表表示法
      • 2) 孩子兄弟表示法
  • 三、树、森林和二叉树的转换
    • 1. 树和二叉树的互相转换
    • 2. 森林和二叉树的互相转化:

一、树的基础概念

1. 树的定义:

树(tree)是n(n≥0)个节点的有限集合

当n=0时,为空树;n>0时,为非空树。任意一棵非空树,满足以下两个条件:

1)有且仅有一个称为根的节点

2)除根节点以外,其余节点可分为m(m>0)个互不相交的有限集T1,T2, …,Tm,其中每一个集合本身又是一棵树,并且称为根的子树(subtree)​。

下图是一棵树的例子:
在这里插入图片描述

2. 树的特点:

不同于链表、数组等线性结构,

  1. 树通常用于表示一对多的关系
  2. 除了树根节点之外,每一个节点只有一个直接前驱
  3. 除了叶子节点之外,每一个节点都有一个或多个直接后继

3. 树的常用术语:

  • 节点:树的组成单位,包含数据元素和若干指向子树的分支信息
  • 节点的度:节点拥有的子树个数
  • 树的度:树中节点的最大度
  • 终端节点:度为0的节点,即叶子节点
  • 分支节点:度大于0的节点,除了叶子节点都是分支节点
  • 内部节点:除了树根和叶子都是内部节点

下图是对上面术语的展示的一棵树:
在这里插入图片描述

  • 节点的层次:从根到该节点的层数(根节点为第一层)
  • 树的深度(或高度):指所有节点中最大的层数
  • 路径:树中两个节点之间经过的节点列表
  • 路径长度:路径上包含的边数

4. 树的简单分类:

  • 有序树:节点的各子树从左到右有序,不能互换位置
    在这里插入图片描述

  • 无序树:节点的各子树可互换位置

  • 森林:由m(m≥0)棵不相交的树组成的集合

二、树的存储结构

树的存储特点:不仅需要存储数据元素,还需要存储节点之间的逻辑关系,即指针

树的存储结构主要有两种:顺序存储链式存储

1.顺序存储

顺序存储的特点 :存储空间是一段连续的内存

顺序存储分为:双亲表示法孩子表示法双亲孩子表示法

1) 双亲表示法

双亲表示法,除了存储数据元素之外,还存储双亲节点的存储位置下标。

特点:

  • 只记录了每个节点的双亲,无法直接得到孩子节点。

2) 孩子表示法

孩子表示法,除存储数据元素之外,还存储所有孩子节点的存储位置下标。

特点:

  • 只记录了所有的孩子节点,无法直接得到双亲。
  • 由于不知道每个节点有多少个孩子,只能按照树的度分配空间,可能会浪费很多空间。

3) 双亲孩子表示法

双亲孩子表示法,是上面两种表示法的结合体,除存储数据之外,还存储了双亲节点和所有孩子节点的存储下标。

特点:

  • 可以直接找到双亲节点和所有的孩子节点
  • 和孩子表示法一样,可能浪费很多空间

2.链式存储

1) 孩子链表表示法

思路:邻接表。将节点的所有孩子存储在一个单链表中

孩子链表表示法的图示:

在这里插入图片描述
特点:

  • 表头包含元素,并指向第一个孩子指针,将所有的孩子放入单链表
  • 在表头中data存储数据元素,frist存储指向第一个孩子的指针
  • 单链表中的节点记录该节点的下标和下一个节点的地址

变种: 双亲孩子链表表示法。

调整方法: 在孩子链表表示法的表头增加一个双亲域。

2) 孩子兄弟表示法

思路:二叉链表。左指针存储第一个孩子,右指针存储兄弟

孩子兄弟表示法图示:
在这里插入图片描述
特点:

  • 节点除了存储数据元素之外,还有两个指向其他节点的指针。
  • 左指针指向第一个孩子,右指针指向最近的兄弟

存储转化图示:
在这里插入图片描述
秘诀: 长子当作左孩子,兄弟关系向右斜

三、树、森林和二叉树的转换

1. 树和二叉树的互相转换

从上面的孩子兄弟表示法得到灵感,所有的树都可以通过孩子兄弟表示法转换成为二叉树

树转换成二叉树:
在这里插入图片描述
而同样的,反操作一下,即可从二叉树还原为树。

二叉树还原为树:
在这里插入图片描述

2. 森林和二叉树的互相转化:

森林也是如此,转化过程中并没有要求必须是一棵树,只需要关注第一个孩子和兄弟。把森林中的多棵树的根节点作为兄弟,即可实现森林到二叉树的转化。

森林转化成二叉树:
在这里插入图片描述
二叉树转化成森林:
在这里插入图片描述
参考资料:《趣学数据结构》 – 陈小玉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2131958.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

根据NVeloDocx Word模板引擎生成Word(五)

前面几篇基本上介绍完了NVeloDocx的基础用法,绝大部分的需求其实都是这些基础的东西,本篇将介绍2个不常用但是实际的业务场景: 1、图片列表输出; 比如在E6开发平台生成的客户端中,图片列表往往是这样显示的&#xff…

【数据结构】第八节:链式二叉树

个人主页: NiKo 数据结构专栏: 数据结构与算法 源码获取:Gitee——数据结构 一、二叉树的链式结构 typedef int BTDataType; typedef struct BinaryTreeNode {BTDataType data;struct BinaryTreeNode* left; // 左子树根节点struct BinaryT…

2024年沈阳都市圈电竞大赛 暨TGA腾讯电竞运动会辽宁省选拔赛盛大开赛

去年,由沈阳市体育局主办的“2023年沈阳都市圈首届电竞大赛暨TGA浑南之夏辽宁省英雄联盟选拔赛”成功举办。通过搭建赛事平台,营造了沈阳都市圈电竞氛围,促进了电子竞技全业态发展。 今年,“2024年沈阳都市圈电竞大赛暨TGA腾讯电…

Day24_0.1基础学习MATLAB学习小技巧总结(24)——图形对象属性值的设置和查询

利用空闲时间把碎片化的MATLAB知识重新系统的学习一遍,为了在这个过程中加深印象,也为了能够有所足迹,我会把自己的学习总结发在专栏中,以便学习交流。 参考书目:《MATLAB基础教程 (第三版) (薛山)》 之前的章节都是…

vue3项目实现全局国际化

本文主要梳理vue3项目实现全项目格式化,例如在我前面文章使用若依创建vue3的项目中,地址:若依搭建vue3项目在导航栏中切换,页面中所有的组件的默认语言随之切换,使用的组件库依旧是element-plus,搭配vue-i1…

LeetCode --- 414周赛

题目列表 3280. 将日期转换为二进制表示 3281. 范围内整数的最大得分 3282. 到达数组末尾的最大得分 3283. 吃掉所有兵需要的最多移动次数 一、将日期转换成二进制表示 题目本质就是将数字转成二进制字符串,可以类比将十进制数字的每一位拆开拼成字符串&#x…

【Redis】redis5种数据类型(list)

目录 基本介绍 命令 LPUSH LPUSHX RPUSH RPUSHX LRANGE LPOP RPOP LINDEX LINSERT LLEN LREM LTRIM LSET 阻塞版本的命令 BLPOP 内部编码 基本介绍 list相当于c的双端队列deque 区分获取和删除的区别 lindex能获取到元素的值lrem也能返回被删除元素的值 命…

一条SQL实现GPT大模型【完全看不懂】

用一条SQL实现GPT大模型,简直让人不可思议,但是俄罗斯一位名叫Quassnoi的SQL牛人做到了,Quassnoi每年只写一条SQL,但是每条SQL都非常复杂: 2021年,用SQL绘制新冠病毒的3D图片 2022年,用SQL模拟…

为何初创数字影像企业纷纷选择入驻孵化基地?

在当今数字化时代,数字影像行业正蓬勃发展,越来越多的初创数字影像企业如雨后春笋般涌现。而这些充满活力与创新的初创企业,为何纷纷选择入驻数字影像企业孵化基地呢? 首先,数字影像企业孵化基地为初创数字影像企业提供…

再次进阶 舞台王者 第八季完美童模全球赛形象大使【邱玳莹】赛场秀场超燃合集!

7月20-23日,2024第八季完美童模全球总决赛在青岛圆满落幕。在盛大的颁奖典礼上,一位才能出众的少女——邱玳莹,迎来了她舞台生涯的璀璨时刻。 形象大使——邱玳莹,以璀璨童星之姿,优雅地踏上完美童模盛宴的绚丽舞台&am…

基于图像级监督和自训练的跨模态肿瘤分割转换器模型|文献速递--Transformer架构在医学影像分析中的应用

Title 题目 Image-level supervision and self-training for transformer-basedcross-modality tumor segmentation 基于图像级监督和自训练的跨模态肿瘤分割转换器模型。 01 文献速递介绍 深度学习在各种医学图像分析应用中展现了出色的性能和潜力(Chen等&…

C语言 12 函数

其实函数在一开始就在使用了: // 这就是定义函数 int main() { ... }程序的入口点就是main函数,只需要将程序代码编写到主函数中就可以运行了,不过这个函数只是由我们来定义,而不是我们来调用。 当然,除了主函数之…

SMT | Kriging代理模型原理及应用

前言 代理模型工具箱 (surrogate modeling toolbox, SMT) 是一个基于Python开发的第三方包,其中包含代理模型方法、采样技术和基准测试函数。有关SMT的详细介绍参见: SMT | 代理模型Python工具包推荐 SMT可实现几个与高斯过程回归相关的代理模型&#x…

串口输出时:英文正常输出、中文乱码输出

一、问题:英文正常输出,英文乱码输出 二、解决方法 1、查看自己使用的串口助手的编码格式 2、查看自己使用输出的文件编码格式 以记事本的格式查看,原则上这两种应该保持相同,如果不相同,就需要把这个文件去另保存一…

图像与文本并存,多模态检索如何带来新的搜索革命

01 火热的多模态智能 回顾到2024的大型语言模型(LLM)的发展,让人欣喜的一点是scaling law依然奏效,智能随着资源的提高继续提高。但另一个让人担忧的点是高质量的文本语料似乎即将触及上限。为了加入更多的数据喂给模型&#xff0…

体育场座位【python实现】

题目来自此处 def main():seats list(map(int,input().split()))count 0for i in range(len(seats)):if seats[i] 0:if (i 0 or seats[i-1] 0) and(i len(seats)-1 or seats[i1] 0):count 1seats[i] 1print(seats)print(count) if __name__ "__main__":mai…

Win11 eNSP安装

前言 新买的电脑,安装eNSP总会遇到一些问题。如果你之前就是做网络安全而现在需要安装eNSP,你可能会因为安装过Wireshark导致一些问题。所以这里就为大家综合一篇文章,修复一些简单的问题。 下载地址:https://pan.baidu.com/s/17p…

Shell:初识sed、awk

Linux系统提供了两个常见的具备上述功能的工具。本节将会介绍Linux世界中最广泛使用的 两个命令行编辑器:sed和gawk。 1. sed编辑器 sed编辑器被称作流编辑器(stream editor),流编辑器则会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。 sed编辑器可…

会做“减法”的项目经理,在工作中赢麻了!

都说我们在生活中要学会“断舍离”,其实工作中的一些事项、流程,也可以尽量精简!对于项目经理来说也是如此,每天会议很多、需求不断,要适当做好“减法”,才能更好朝着目标方向前进! 01、什么是做…

Linux 添加新用户之adduser 和 useradd 的区别 | 添加用户到 sudo 组【笔记型博文】

🥇 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️ 文章目录 ❤️ 创建新用户adduser 用法【推荐】useradd 用法 安装 sudo添加用户到 sudo 用…