树的存储方式--vector容器和链式前向星

文章部分截图来自于比特算法竞赛课程,仅供学习交流,侵权联系删除;

1.树的存储

学会使用孩子表示法,对于我们的树进行表示和遍历的过程,孩子表示法,就是只关心这个孩子的信息;

清楚这个父子关系的情况里面,我们存储的就是孩子,但是在不清楚这个父子关系的树里面,我们把这个相连接的所有的节点全部记录下来即可;

2.使用vector对于树的节点存储的代码实现

下面的这个就是我们的代码:实际上就是把和这个节点相连接的所有的节点全部使用vector插入数据的形式放到我们的这个容器里面去;

edge对应的节点就是我们的这个主干上面的节点,具体可以去参照上面的图里面的蓝色的集合,也就是这个里面的每一个数据背后都是一个容器,一个vector容器;

因为我们的这个假设的情况是无根数,因此这个里面比如说1和2相连接,这个时候我们的1容器里面需要插入我们的数据2,我们的这个2对应的容器里面需要插入这个数据1,因此对于同样的这个链接而言,我们是需要进行两次这个插入的操作的;

3.链式前向星--链表法

这个方法的名字起的非常的奇怪,我也觉得非常的奇怪,但是这个原理简单,但是操作起来并不是很容易,起码我自己还是觉得有些难度的,但是这个代码写起来真的非常的简单,仅仅从这个代码的行数来看,这个题目似乎不是很难,但是从这个理解上面来看,我觉得需要好好看一下;

这个要求大家对于之前学习的这个链表理解的非常的深刻,像我自己,之前第一次学习这个链表的时候理解就不是非常的到位,因此这个里面还是遇到了一点问题的;

其次就是我觉得需要理解这个里面涉及到的对应的数组的含义,存放的是什么东西,以及这个指针的指向的具体的内容,这些关系大家一定需要缕清,我觉得这个事非常的重要的;

下面的这个是上课的时候老师的课件展示,我直接按照这个操作的流程基图展示给大家把,并且进行这个相关的说明,希望可以对于大家有所帮助;

下面的这个是最开始的一张图:此时我们的3指向1,下面的这个图片里面的橙色的部分哈,因此这个时候的第一个操作就是把这个1存放到我们的3对应的链表里面去;

也就是说,把这个孩子存放到这个父亲对应的这个链表里面去,这个31之间的关系当中,这个3就是父亲,1就是孩子,因此这个是把1存放到这个3的链表里面去;

存放的过程分为下面的这个步骤,一共是两个步骤,上面的这个仅仅展示的是第一个步骤:

1)在我们的这个e数组里面存放下来我们的数据区域的内容,也就是这个孩子的内容,因为这个孩子是需要进行插入的,因此上面的这个里面e数组,ne数组原本都是0,但是这个时候我们的1就变成了黄色的,意味着我们的这个1已经放到我们的数据数组里面去了;

2)第二个就是回想我们的头插时候进行的操作,也就是我们的插入的节点指向我们的头结点的下一个元素,头结点指向我们的插入元素,这个具体案例里面,这个h数组存放的就是我们的头结点;

这个具体的变化就是我们的ne数组里面的内容发生了变化:下面的这个数组里面的ne数组存放的类似于我们的链表节点里面的这个next指针,这个时候需要指向我们的这个头结点的下一个位置,因此这个h数组里面的3对应的0就是头结点的下一个位置,这个时候需要传递给我们的这个ne数组里面的下标为1的位置;

其次就是这个h数组表示头节点,需要指向我们的这个插入节点,因此这个插入节点的下标1需要放到我们的H数组里面去(下面的这个还没有体现出来哈)

下面的这个体现的就是对于我们的头结点的信息进行更新的过程:上面其实已经提到了,就是把我们的这个插入节点的下标,放到我们的h数组里面去,因此这个h数组里面的3下标的位置出现了这个黄色的1,表示的就是我们的插入的节点的下标

上面的这个事一个非常标准化的过程,接下来的操作都是类似的,我不再进行详细的赘述了;

下面的这个是我们的链式前向星的代码:

需要注意的就是我们的这个数组空间开辟的大小的问题,h数组里面的就是我们的虚拟头结点,但是对于这个e数组和ne数组而言,针对于解决这个样子的无根数,这个时候我们的1和3之间有链接,3和1之间有链接,这个一组链接实际上我们需要进行二次存储,因此这个我们的这个e数组和ne数组需要进行二倍的空间使用;

add函数的内容就是模拟的我们的链表节点的头部插入的内容

相关推荐
淮北4942 小时前
STL学习(十一、常用的算数算法和集合算法)
c++·vscode·学习·算法
糖葫芦君2 小时前
玻尔兹曼分布与玻尔兹曼探索
人工智能·算法·机器学习
花火|8 小时前
算法训练营day37 动态规划⑤ 完全背包 518. 零钱兑换 II、 377. 组合总和 Ⅳ、70. 爬楼梯 (进阶)
算法·动态规划
Neil今天也要学习8 小时前
永磁同步电机无速度算法--脉振方波注入法
算法
绿炮火8 小时前
【MATLAB】(二)基础知识
开发语言·算法·matlab
88号技师9 小时前
2025年6月最新SCI-灰熊脂肪增长优化算法Grizzly Bear Fat Increase-附Matlab免费代码
开发语言·人工智能·算法·matlab·优化算法
玄月初二丶9 小时前
28. 找出字符串中第一个匹配项的下标
c语言·开发语言·数据结构·算法
qq_427506089 小时前
JavaScript和小程序写水印的方法示例
前端·算法·微信小程序
小猪扒饭9 小时前
C基础 12_day
c语言·笔记·学习·算法
2501_9247328710 小时前
光伏热斑误检率↓79%!陌讯多模态融合算法在智慧能源的落地优化
算法·目标检测·计算机视觉·能源