前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >6.4 树和森林

6.4 树和森林

原创
作者头像
小林C语言
修改于 2020-12-14 06:10:39
修改于 2020-12-14 06:10:39
4510
举报

01树的存储结构

1、在大量的应用中,人们曾使用多种形式的存储结构来表示树。

2、双亲表示法:假设以一组连续空间存储树的结点,同时在每个结点中附设一个指示器指示其双亲结点在链表中的位置。这种表示法中,求结点的孩子时需要遍历整个结构。

3、孩子表示法:由于树中每个结点可能有多棵子树,则可用多重链表,即每个结点有多个指针域,其中每个指针指向一棵子树的根结点。

4、孩子兄弟表示法:又称二叉树表示法,或二叉树表表示法。即以二叉链表作树的存储结构。链表中结点的两个链域分别指向该结点的第一个孩子结点和下一个兄弟结点,分别命名为firstchild域和nextsibling域。

02森林与二叉树的转换

1、由于二叉树和树都可用二叉链表作为存储结构,则以二叉链表作为媒介可导出树与二叉树之间的一个对应关系。

2、给定一棵树,可以找到唯一的一棵二叉树与之对应,从物理结构来看,他们的二叉链表是相同的,只是解释不同而已。

03 树和森林的遍历

1、由树结构的定义可引出两种次序遍历树的方法:一种是根(次序)遍历树,即:先访问树的根结点,然后依次先根遍历根的每棵子树;另一种是后根(次序)遍历,即:先依次后根遍历每棵子树,然后访问根结点。

2、先序遍历森林:若森林非空,则可按下述规则遍历之:

(1)访问森林中第一棵树的根结点。

(2)先序遍历第一棵树中根结点的子树森林。

(3)先序遍历除去第一棵树之后剩余的树构成的森林。

3、中序遍历森林:若森林非空,则可按下述规则遍历之:

(1)中序遍历森林中第一棵树的根结点的子树森林。

(2)访问第一棵树的根结点。

(3)中序遍历除去第一棵树之后剩余的树构成的森林。

C语言 | 大写A转换为小写a

更多案例可以go公众号:C语言入门到精通

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
数据结构篇-树与森林
树是n (n≥0)个结点的有限集合,n=0时,称为空树,这是一种特殊情况。在任意- - 棵非空树中应满足:
莫浅子
2022/11/18
3690
数据结构篇-树与森林
数据结构与算法 -树和森林
以一组连续空间存储树的结点,即一个一维数组构成,数组每个分量包含两个域:数据域和双亲域。数据域用于存储树上一个结点的数据元素值,双亲域用于存储本结点的双亲结点在数组中的序号(下标值),根结点没有双亲,双亲域的值为-1。
越陌度阡
2020/11/26
4180
数据结构与算法 -树和森林
数据结构学习笔记(树、二叉树)
树(一对多的数据结构) 树(Tree)是n(n>=0)个结点的有限集。n=0时称为空树。在任意一颗非空树种: (1)有且仅有一个特定的称为根(Root)的结点; (2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、......、Tn,其中每一个集合本身又是一棵树,并且称为根的子树。 对于树的定义还需要强调两点: 1.n>0时根结点是唯一的,不可能存在多个根结点,数据结构中的树只能有一个根结点。 2.m>0时,子树的个数没有限制,但它们一定是互不相交的。 结点分类: 结点拥有的子
希希里之海
2018/05/16
6820
【数据结构】C语言实现树和森林的遍历
在上一篇内容中我们介绍了树、森林与二叉树之间的相互转换,其核心逻辑就是通过孩子兄弟存储结构对树、森林进行存储,完成存储后的树和森林就被转换成了一棵二叉树。
蒙奇D索隆
2025/03/19
990
【数据结构】C语言实现树和森林的遍历
【自考】数据结构第四章树和森林,期末不挂科指南,第7篇
这篇博客继续我们的《数据结构导论》课程,今天重点说说树和森林怎么备考自考和通过期末考试。
梦想橡皮擦
2020/01/15
4630
【自考】数据结构第四章树和森林,期末不挂科指南,第7篇
数据结构—树与二叉树
之前谈到的线性表、栈和队列都是一对一的数据结构,但是现实中也存在很多一对多的数据结构,这篇要写的就是一种一对多的数据结构———树。全文分为如下几部分:
张俊红
2018/08/23
6470
树和森林的遍历
森林由三部分构成:森林中第一个树的根结点+森林中第一颗树的根结点的子树森林+森林中除去第一棵树而由其它树构成的森林。按照森林和树相互递归的定义,我们可以推出森林的两种遍历方(这两种遍历方法也是递归定义)。
红目香薰
2022/11/29
6250
树和森林的遍历
期末复习之数据结构 第6章 树和二叉树
答:最快方法:用叶子数=[n/2]=350 5. 设一棵完全二叉树具有1000个结点,则此完全二叉树有 500 个叶子结点,有 499 个度为2的结点,有 1 个结点只有非空左子树,有 0 个结点只有非空右子树。 答:最快方法:用叶子数=[n/2]=500 ,n2=n0-1=499。 另外,最后一结点为2i属于左叶子,右叶子是空的,所以有1个非空左子树。完全二叉树的特点决定不可能有左空右不空的情况,所以非空右子树数=0. 6. 一棵含有n个结点的k叉树,可能达到的最大深度为 n ,最小深度为 2 。 答:当k=1(单叉树)时应该最深,深度=n(层);当k=n-1(n-1叉树)时应该最浅,深度=2(层),但不包括n=0或1时的特例情况。教材答案是“完全k叉树”,未定量。) 7. 二叉树的基本组成部分是:根(N)、左子树(L)和右子树(R)。因而二叉树的遍历次序有六种。最常用的是三种:前序法(即按N L R次序),后序法(即按 L R N 次序)和中序法(也称对称序法,即按L N R次序)。这三种方法相互之间有关联。若已知一棵二叉树的前序序列是BEFCGDH,中序序列是FEBGCHD,则它的后序序列必是 F E G H D C B 。 8.中序遍历的递归算法平均空间复杂度为 O(n) 。 答:即递归最大嵌套层数,即栈的占用单元数。精确值应为树的深度k+1,包括叶子的空域也递归了一次。 9. 用5个权值{3, 2, 4, 5, 1}构造的哈夫曼(Huffman)树的带权路径长度是 33 。 三、单项选择题 ( C )1. 不含任何结点的空树 。 (A)是一棵树; (B)是一棵二叉树; (C)是一棵树也是一棵二叉树; (D)既不是树也不是二叉树 答:以前的标答是B,因为那时树的定义是n≥1 ( C )2.二叉树是非线性数据结构,所以 。 (A)它不能用顺序存储结构存储; (B)它不能用链式存储结构存储; (C)顺序存储结构和链式存储结构都能存储; (D)顺序存储结构和链式存储结构都不能使用 ( C )3. 〖01年计算机研题〗 具有n(n>0)个结点的完全二叉树的深度为 。 (A) élog2(n)ù (B) ë log2(n)û (C) ë log2(n) û+1 (D) élog2(n)+1ù 注1:éx ù表示不小于x的最小整数;ë xû表示不大于x的最大整数,它们与[ ]含义不同! 注2:选(A)是错误的。例如当n为2的整数幂时就会少算一层。似乎ë log2(n) +1û是对的? ( A )4.把一棵树转换为二叉树后,这棵二叉树的形态是 。 (A)唯一的 (B)有多种 (C)有多种,但根结点都没有左孩子 (D)有多种,但根结点都没有右孩子 5. 从供选择的答案中,选出应填入下面叙述 ? 内的最确切的解答,把相应编号写在答卷的对应栏内。 树是结点的有限集合,它A 根结点,记为T。其余的结点分成为m(m≥0)个 B 的集合T1,T2,…,Tm,每个集合又都是树,此时结点T称为Ti的父结点,Ti称为T的子结点(1≤i≤m)。一个结点的子结点个数为该结点的 C 。 供选择的答案 A: ①有0个或1个 ②有0个或多个 ③有且只有1个 ④有1个或1个以上 B: ①互不相交 ② 允许相交 ③ 允许叶结点相交 ④ 允许树枝结点相交 C: ①权 ② 维数 ③ 次数(或度) ④ 序 答案:ABC=1,1,3 6. 从供选择的答案中,选出应填入下面叙述 ? 内的最确切的解答,把相应编号写在答卷的对应栏内。 二叉树 A 。在完全的二叉树中,若一个结点没有 B ,则它必定是叶结点。每棵树都能惟一地转换成与它对应的二叉树。由树转换成的二叉树里,一个结点N的左子女是N在原树里对应结点的 C ,而N的右子女是它在原树里对应结点的 D 。 供选择的答案 A: ①是特殊的树 ②不是树的特殊形式 ③是两棵树的总称 ④有是只有二个根结点的树形结构 B: ①左子结点 ② 右子结点 ③ 左子结点或者没有右子结点 ④ 兄弟 C~D: ①最左子结点 ② 最右子结点 ③ 最邻近的右兄弟 ④ 最邻近的左兄弟 ⑤ 最左的兄弟 ⑥ 最右的兄弟 答案:A= B= C= D= 答案:ABCDE=2,1,1,3 四
henu_Newxc03
2021/12/28
6890
期末复习之数据结构 第6章 树和二叉树
【数据结构】树与森林
文章目录 5.6.1 转换概述 5.6.2 树转换成二叉树 5.6.3 二叉树转换成树 5.6.4 森林与二叉树互转 5.6.5 树的存储结构 5.6.6 树的遍历 5.6.7 森林的遍历 5.7 作业 5.6.1 转换概述 树与二叉树之间、森林与二叉树之间可以相互转换,而且这种转换是一一对应的。 5.6.2 树转换成二叉树 树转换成二叉树可归纳3步骤:加线、删线、旋转 加线:将树中所有相邻的兄弟之间加一条连线。 删线:对树中的每一个结点,只保留它与第1个孩子结点之间的连线,删去它与其
陶然同学
2023/02/26
2770
【数据结构】树与森林
数据结构:树与二叉树
二叉树的顺序存储结构就是用一组地址连续的存储单元依次自上而下、自左而右存储完全二叉树上的节点元素,即将完全二叉树上编号为i的节点元素存储在某个数组下边为i-1的分量中。
HLee
2020/12/31
1.2K0
数据结构:树与二叉树
【Python数据结构系列】☀️《树与二叉树-基础知识》——知识点讲解+代码实现☀️
树(Tree)是n(n≥0)个结点的有限集,它或为空树(n=0);或为非空树,对于非空树T:
天道Vax的时间宝藏
2021/08/24
1.1K0
我的思念像满二叉树般疯长,每个空指针都指向你的方向——全程动画可视化数据结构算法之二叉树
盛透侧视攻城狮
2025/03/02
1301
我的思念像满二叉树般疯长,每个空指针都指向你的方向——全程动画可视化数据结构算法之二叉树
《大话数据结构》树以及赫夫曼编码的例子
第六章 树 6.2 树的定义 树(Tree)的n个结点的有限集。当n=0时,称为空树。 任意一个非空树中: 1)有且仅有一个特定的称为根(root)的结点 2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2 …… 、Tm。其中每个集合本身又是一棵树,并且称为根的子树(SubTree)。 注意: 1)n>0时根节点的唯一的,不可能存在多个根节点。 2)m>0时,字数的个数没有限制,但是它们一定是互不相交的。 6.2.1 结点分类 结点拥有的子树个数称为结点的度(Degree)。 度为0的结
xcywt
2018/03/28
1K0
《大话数据结构》树以及赫夫曼编码的例子
数据结构——树和二叉树
满二叉树是叶子一个也不少的树,而完全二叉树虽然前n-1层是满的,但最底层却允许在右边缺少连续若干个结点。满二叉树是完全二叉树的一个特例。
ruochen
2021/06/29
7350
重学数据结构(六、树和二叉树)
树(Tree)是n(n>=0)个结点的有限集,它或为空树(n= 0);,或为非空树,对千非空树T:
三分恶
2020/10/30
8330
重学数据结构(六、树和二叉树)
数据结构–树
1.术语 1.树(tree): 树是n(n≥0)个结点的有限集T, 当n=0时,T为空树; 当n>0时, (1)有且仅有一个称为T的根的结点, (2)当n>1时,余下的结点分为m(m>0)个互不相交的有限集
用户7267083
2022/12/08
4860
数据结构–树
【数据结构】C语言实现二叉树的基本操作——二叉树的遍历(先序遍历、中序遍历、后序遍历)
通过前面的介绍,我们已经认识了二叉树的逻辑结构和存储结构。在今天的内容中,我们将会开始介绍二叉树的最后一个要素——二叉树的基本操作。
蒙奇D索隆
2024/09/07
1.2K0
【数据结构】C语言实现二叉树的基本操作——二叉树的遍历(先序遍历、中序遍历、后序遍历)
中国高校计算机考研:计算机数据结构核心考点解析
栈是仅限制在表的一端进行插入和删除运算的线性表,称插入、删除这一端为栈顶。表中无元素时为空栈。栈的修改是按后进先出的原则进行的。通常栈有顺序栈和链栈两种存储结构。
张哥编程
2024/12/19
1440
数据结构 第五章 树和二叉树
树:n(n≥0)个结点的有限集合。 当n=0时,称为空树; 任意一棵非空树满足以下条件: ⑴ 有且仅有一个特定的称为根的结点; ⑵ 当n>1时,除根结点之外的其余结点被分成m(m>0)个互不相交的有限集合T1,T2,… ,Tm,其中每个集合又是一棵树,并称为这个根结点的子树。 结点的度:结点所拥有的子树的个数。 树的度:树中各结点度的最大值。 叶子结点:度为0的结点,也称为终端结点。 分支结点:度不为0的结点,也称为非终端结点。 孩子、双亲:树中某结点子树的根结点称为这个结点的孩子结点,这个结点称为它孩子结点的双亲结点; 兄弟:具有同一个双亲的孩子结点互称为兄弟。 路径:如果树的结点序列n1, n2, …, nk有如下关系:结点ni是ni+1的双亲(1<=i<k),则把n1, n2, …, nk称为一条由n1至nk的路径;路径上经过的边的个数称为路径长度。 祖先、子孙:在树中,如果有一条路径从结点x到结点y,那么x就称为y的祖先,而y称为x的子孙。 结点所在层数:根结点的层数为1;对其余任何结点,若某结点在第k层,则其孩子结点在第k+1层。 树的深度:树中所有结点的最大层数,也称高度。 层序编号:将树中结点按照从上层到下层、同层从左到右的次序依次给他们编以从1开始的连续自然数。 有序树、无序树:如果一棵树中结点的各子树从左到右是有次序的,称这棵树为有序树;反之,称为无序树。 森林:m (m≥0)棵互不相交的树的集合。 同构:对两棵树,若通过对结点适当地重命名,就可以使这两棵树完全相等(结点对应相等,结点对应关系也相等),则称这两棵树同构。 前序遍历:树的前序遍历操作定义为: 若树为空,不进行遍历;否则 ⑴ 访问根结点; ⑵ 按照从左到右的顺序前序遍历根结点的每一棵子树。 后序遍历:树的后序遍历操作定义为: 若树为空,则遍历结束;否则 ⑴ 按照从左到右的顺序后序遍历根结点的每一棵子树; ⑵ 访问根结点。 层序遍历:树的层序遍历操作定义为: 从树的第一层(即根结点)开始,自上而下逐层遍历,在同一层中,按从左到右的顺序对结点逐个访问。
Twcat_tree
2022/11/29
3040
【Java数据结构】二叉树详解(一)
结点的度:一个结点含有子树的个数称为该结点的度; 如上图:A的度为6 树的度:一棵树中,所有结点度的最大值称为树的度; 如上图:树的度为6 叶子结点或终端结点:度为0的结点称为叶结点; 如上图:B、C、H、I...等节点为叶结点 双亲结点或父结点:若一个结点含有子结点,则这个结点称为其子结点的父结点; 如上图:A是B的父结点 孩子结点或子结点:一个结点含有的子树的根结点称为该结点的子结点; 如上图:B是A的孩子结点 根结点:一棵树中,没有双亲结点的结点;如上图:A 结点的层次:从根开始定义起,根为第1层,根的子结点为第2层,以此类推 树的高度或深度:树中结点的最大层次; 如上图:树的高度为4 树的如下概念只需了解,我们只要知道是什么意思即可: 非终端结点或分支结点:度不为0的结点; 如上图:D、E、F、G...等节点为分支结点 兄弟结点:具有相同父结点的结点互称为兄弟结点; 如上图:B、C是兄弟结点 堂兄弟结点:双亲在同一层的结点互为堂兄弟;如上图:H、I互为堂兄弟结点 结点的祖先:从根到该结点所经分支上的所有结点;如上图:A是所有结点的祖先 子孙:以某结点为根的子树中任一结点都称为该结点的子孙。如上图:所有结点都是A的子孙 森林:由m(m>=0)棵互不相交的树组成的集合称为森林
E绵绵
2024/06/06
1300
【Java数据结构】二叉树详解(一)
推荐阅读
相关推荐
数据结构篇-树与森林
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档