数据结构课件——第7章 树与森林
数据结构:Python语言描述教学课件(共8章)第5章 树形结构

设B为树中分支数,则
=+
所以
= + −
再由二叉树的性质
= +
代入上式有
= + − − = ( − )
2.2 二叉树的性质
【例5.2】已知一棵度为m的树中有n1个度为1的结点、n2个
度为2的结点、…、nm个度为m的结点,问该树中共有多少
11
if p.rchild is not None:
12
s.push(p.rchild)
13
p = p.lchild
2.4 二叉树的遍历
3)二叉树遍历操作实现的非递归算法
B. 中序遍历
中序遍历从二叉树的根结点出发,沿着该结点的左子树向下搜索,每遇
为m,有n=m+1。
• 证明: 设二叉树中度为1的结点个数为k,二叉树的结点总数为s,有s=k+n+m。
又因为除根结点外每个结点都有一个进入它的分支,所以s-1=k+2*m。整理后得
到n=m+1,得证。
2.2 二叉树的性质
• 性质4: 具有n个结点的完全二叉树,其深度为
+ 或者 ( + ) 。
第5章 树形结构
主要内容
1. 树
2. 二叉树
3. 哈夫曼树及哈夫曼编码
4. 树和森林
1. 树
1.1 树的基本概念
1.2 树的术语
1.1 树的基本概念
• 树是数据元素之间具有层次关系的非线性结构,是由n个结
点构成的有限集合,结点数为0的树叫空树。树必有且仅有一个被称为根的结点。
• (1) 将二叉树的根结点入栈。
• (2) 若栈非空,将结点从栈中弹出并访问。
二叉树,树,森林遍历之间的对应关系

二叉树,树,森林遍历之间的对应关系一、引言在计算机科学中,数据结构是非常重要的知识点之一。
而树这一数据结构,作为基础的数据结构之一,在软件开发中有着广泛的应用。
本文将重点探讨二叉树、树和森林遍历之间的对应关系,帮助读者更加全面地理解这些概念。
二、二叉树1. 二叉树的定义二叉树是一种特殊的树结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。
二叉树可以为空,也可以是一棵空树。
2. 二叉树的遍历在二叉树中,有三种常见的遍历方式,分别是前序遍历、中序遍历和后序遍历。
在前序遍历中,节点的访问顺序是根节点、左子树、右子树;在中序遍历中,节点的访问顺序是左子树、根节点、右子树;在后序遍历中,节点的访问顺序是左子树、右子树、根节点。
3. 二叉树的应用二叉树在计算机科学领域有着广泛的应用,例如用于构建文件系统、在数据库中存储有序数据、实现算法中的搜索和排序等。
掌握二叉树的遍历方式对于理解这些应用场景非常重要。
三、树1. 树的定义树是一种抽象数据类型,由n(n>0)个节点组成一个具有层次关系的集合。
树的特点是每个节点都有零个或多个子节点,而这些子节点又构成了一颗子树。
树中最顶层的节点称为根节点。
2. 树的遍历树的遍历方式有先根遍历、后根遍历和层次遍历。
在先根遍历中,节点的访问顺序是根节点、子树1、子树2...;在后根遍历中,节点的访问顺序是子树1、子树2...,根节点;在层次遍历中,节点的访问顺序是从上到下、从左到右依次访问每个节点。
3. 树的应用树广泛用于分层数据的表示和操作,例如在计算机网络中的路由算法、在操作系统中的文件系统、在程序设计中的树形结构等。
树的遍历方式对于处理这些应用来说至关重要。
四、森林1. 森林的定义森林是n(n>=0)棵互不相交的树的集合。
每棵树都是一颗独立的树,不存在交集。
2. 森林的遍历森林的遍历方式是树的遍历方式的超集,对森林进行遍历就是对每棵树进行遍历的集合。
3. 森林的应用森林在实际编程中经常用于解决多个独立树结构的问题,例如在数据库中对多个表进行操作、在图像处理中对多个图形进行处理等。
数据结构-第6章 树和二叉树---4. 树和森林(V1)

6.4.1 树的存储结构
R AB C D EG F
R⋀
A
⋀D
⋀B
⋀E ⋀
C⋀
⋀G
⋀F ⋀
6.4.2 树、森林和二叉树的转换
1. 树转换为二叉树 将树转换成二叉树在“孩子兄弟表示法”中已 给出,其详细步骤是: ⑴ 加线。在树的所有相邻兄弟结点之间加一 条连线。 ⑵ 去连线。除最左的第一个子结点外,父结点 与所有其它子结点的连线都去掉。 ⑶ 旋转。将树以根结点为轴心,顺时针旋转 450,使之层次分明。
B C
D
A E
L HK
M
技巧:无左孩子 者即为叶子结点
6.4.3 树和森林的遍历
1. 树的遍历 由树结构的定义可知,树的遍历有二种方法。 ⑴ 先序遍历:先访问根结点,然后依次先序 遍历完每棵子树等。价于对应二叉树的先序遍历
⑵ 后序遍历:先依次后序遍历完每棵子树,然 后访问根结点。等价于对应二叉树的中序遍历
0 R -1 1A 0 2B 0 3C 0
}Ptree ; R
4D 1 5E 1
AB C
6F 3
7G 6
DE
F
8H 6
9I 6
G H I 10~MAX_Size-1 ... ...
6.4.1 树的存储结构
2. 孩子表示法
每个结点的孩子结点构成一个单链表,即有n 个结点就有n个孩子链表;
n个孩子的数据和n个孩子链表的头指针组成一 个顺序表; 结点结构定义: 顺序表定义:
typedef struct PTNode { ElemType data ;
数据结构第七章 树和森林

7.5 树的应用
➢判定树
在实际应用中,树可用于判定问题的描述和解决。
•设有八枚硬币,分别表示为a,b,c,d,e,f,g,h,其中有一枚且 仅有一枚硬币是伪造的,假硬币的重量与真硬币的重量不同,可能轻, 也可能重。现要求以天平为工具,用最少的比较次数挑选出假硬币, 并同时确定这枚硬币的重量比其它真硬币是轻还是重。
的第i棵子树。 ⑺Delete(t,x,i)在树t中删除结点x的第i棵子树。 ⑻Tranverse(t)是树的遍历操作,即按某种方式访问树t中的每个
结点,且使每个结点只被访问一次。
7.2.2 树的存储结构
顺序存储结构 链式存储结构 不管哪一种存储方式,都要求不但能存储结点本身的数据 信息,还要能够唯一的反映树中各结点之间的逻辑关系。 1.双亲表示法 2.孩子表示法 3.双亲孩子表示法 4.孩子兄弟表示法
21
将二叉树还原为树示意图
A BCD
EF
A
B
C
E
D
F
A
B
C
E
D
F
22
练习:将下图所示二叉树转化为树
1 2
4
5
3
6
2 4
1 53
6
23
7.3.2 森林转换为二叉树
由森林的概念可知,森林是若干棵树的集合,只要将森林中各棵树 的根视为兄弟,森林同样可以用二叉树表示。 森林转换为二叉树的方法如下:
⑴将森林中的每棵树转换成相应的二叉树。 ⑵第一棵二叉树不动,从第二棵二叉树开始,依次把后一棵二叉树 的根结点作为前一棵二叉树根结点的右孩子,当所有二叉树连起来 后,此时所得到的二叉树就是由森林转换得到的二叉树。
相交的集合T1,T2,…,Tm,其中每一个集合Ti(1≤i≤m)本身又是 一棵树。树T1,T2,…,Tm称为这个根结点的子树。 • 可以看出,在树的定义中用了递归概念,即用树来定义树。因此, 树结构的算法类同于二叉树结构的算法,也可以使用递归方法。
数据结构习题及答案与实验指导(树和森林)7

第7章树和森林树形结构是一类重要的非线性结构。
树形结构的特点是结点之间具有层次关系。
本章介绍树的定义、存储结构、树的遍历方法、树和森林与二叉树之间的转换以及树的应用等内容。
重点提示:●树的存储结构●树的遍历●树和森林与二叉树之间的转换7-1 重点难点指导7-1-1 相关术语1.树的定义:树是n(n>=0)个结点的有限集T,T为空时称为空树,否则它满足如下两个条件:①有且仅有一个特定的称为根的结点;②其余的结点可分为m(m>=0)个互不相交的子集T1,T2,…,T m,其中每个子集本身又是一棵树,并称为根的子树。
要点:树是一种递归的数据结构。
2.结点的度:一个结点拥有的子树数称为该结点的度。
3.树的度:一棵树的度指该树中结点的最大度数。
如图7-1所示的树为3度树。
4.分支结点:度大于0的结点为分支结点或非终端结点。
如结点a、b、c、d。
5.叶子结点:度为0的结点为叶子结点或终端结点。
如e、f、g、h、i。
6.结点的层数:树是一种层次结构,根结点为第一层,根结点的孩子结点为第二层,…依次类推,可得到每一结点的层次。
7.兄弟结点:具有同一父亲的结点为兄弟结点。
如b、c、d;e、f;h、i。
8.树的深度:树中结点的最大层数称为树的深度或高度。
9.有序树:若将树中每个结点的子树看成从左到右有次序的(即不能互换),则称该树为有序树,否则称为无序树。
10.森林:是m棵互不相交的树的集合。
7-1-2 树的存储结构1.双亲链表表示法以图7-1所示的树为例。
(1)存储思想:因为树中每个元素的双亲是惟一的,因此对每个元素,将其值和一个指向双亲的指针parent构成一个元素的结点,再将这些结点存储在向量中。
(2)存储示意图:-1 data:parent:(3)注意: Parrent域存储其双亲结点的存储下标,而不是存放结点值。
下面的存储是不正确的:-1 data:parent:2.孩子链表表示法(1)存储思想:将每个数据元素的孩子拉成一个链表,链表的头指针与该元素的值存储为一个结点,树中各结点顺序存储起来,一般根结点的存储号为0。
《数据结构》课件

第二章 线性表
1
线性表的顺序存储结构
2
线性表的顺序存储结构使用数组来存储元素,
可以快速随机访问元素。
3
线性表的常见操作
4
线性表支持常见的操作,包括插入、删除、 查找等,可以灵活地操作其中的元素。
线性表的定义和实现
线性表是一种数据结构,它包含一组有序的 元素,可以通过数组和链表来实现。
线性表的链式存储结构
线性表的链式存储结构使用链表来存储元素, 支持动态扩展和插入删除操作。
第三章 栈与队列
栈的定义和实现
栈是一种特殊的线性表,只能在一 端进行插入和删除操作,遵循后进 先出的原则。
队列的定义和实现
队列是一种特殊的线性表,只能在 一端进行插入操作,在另一端进行 删除操作,遵循先进先出的原则。
栈和队列的应用场景和操作
哈希表是一种高效的查找数据结构, 通过哈希函数将关键字映射到数组 中,实现快速查找。
排序算法包括冒泡排序、插入排序 和快速排序等,可以根据数据规模 和性能要求选择合适的算法。
结语
数据结构的学习心得 总结
学习数据结构需要掌握基本概念 和常见操作,通过实践和练习加 深理解和熟练度。
下一步学习计划的安 排
在掌握基本数据结构的基础上, 可以进一步学习高级数据结构和 算法,提升编程技能。
相关学习资源推荐
推荐一些经典的数据结构教材和 在线学习资源,如《算法导论》 和LeetCode等。
栈和队列在计算机科学中有许多应 用,如函数调用、表达式求值和作 业调度等。
第四章 树与二叉树
树的定义和性质
树是由节点和边组成的一种非线性数据结构,每个 节点可以有多个子节点。
二叉树的遍历方式
二叉树的遍历方式包括前序遍历、中序遍历和后序 遍历,可以按不同顺序输出节点的值。
算法与数据结构——C语言描述.ppt
求某个结点的最左子女运算很容易实现,找到结 点的全部子女也很容易,但求某个结点的父母和右兄 弟实现起来比较费事。另一个缺点是:合并若干个子 树构成一个新树时(createTree_chitree操作)也要考虑 多个结点表的合并问题,由于这些结点表通常用顺序 方式表示,所以合并起来比较麻烦。
2019-8-29
第五章 树和二叉树
5.1 树与树林 5.2 树和树林的存储表示 5.3 二 叉 树 5.4 二叉树的存储表示 5.5 哈夫曼算法及其应用
2019-8-29
谢谢您的观赏
1
线性结构和非线性结构。
树形结构是以分支关系定义的层次结构, 在现实世界中广泛存在,在计算机领域中也 有广泛应用。
本章重点讨论二叉树的存储结构及其各 种操作,并研究树和森林与二叉树之间的转 换关系。
例如树t中A,C,E,I,J是从A到J的一条路径,其长度为4。
2019-8-29
谢谢您的观赏
11
结点的层数
规定根的层数为0,其余结点的层数等于其父母结 点的层数加1。
例如t中,0层的结点是A,1层的结点有B,C,D,4层的结 点是J。
树的深度或高度
树中结点的最大层数称为树的深度或的观赏
4
树的表示方法:
A
B
C
DE F
GH
IJ
(a)树形表示
2019-8-29
谢谢您的观赏
(c ) 凹入表
5
A
(b) 文氏图
B D IEJ F GCH
2019-8-29
(A(B(D)(E(I)(J))(C(G)(H))) (d) 嵌套括号表示法
谢谢您的观赏
6
树的递归定义:
缺点:a)没有表示出结点之间的左右次序; b)找结点的子女和兄弟比较费事。
《数据结构》第 7 章 图
v3
v4 v5 v4
v3
v5 v4
v3
v5 v4
v3
v5 v4
v3
v5
注
一个图可以有许多棵不同的生成树。 所有生成树具有以下共同特点: 生成树的顶点个数与图的顶点个数相同; 生成树是图的极小连通子图; 一个有 n 个顶点的连通图的生成树有 n-1 条边; 生成树中任意两个顶点间的路径是唯一的; 在生成树中再加一条边必然形成回路。 含 n 个顶点 n-1 条边的图不一定是生成树。
A1 = {< v1, v2>, < v1, v3>, < v3, v4>, < v4, v1>} v1 v2
有向图
v3
v4
制作:计算机科学与技术学院 徐振中
数据结构 边:若 <v, w>∈VR 必有<w, v>∈VR,则以 无序对 (v, w) 代表这两个有序对,表示 v 和 w 之 间的一条边,此时的图称为无向图。 G2 = (V2, E2) V2 = {v1, v2, v3, v4, v5}
第七章 图
E2 = {(v1, v2), (v1, v4), (v2, v3), (v2, v5) , (v3, v4), (v3, v5)} v1
G2
v3
v2
无向图
v4
v5
制作:计算机科学与技术学院 徐振中
数据结构
第七章 图
例:两个城市 A 和 B ,如果 A 和 B 之间的连线的涵义是 表示两个城市的距离,则<A, B> 和 <B, A> 是相同的, 用 (A, B) 表示。 如果 A 和 B 之间的连线的涵义是表示两城市之 间人口流动的情况,则 <A, B> 和 <B, A> 是不同的。 北京 <北京,上海> (北京,上海) <上海,北京> <北京,上海> 北京 上海 上海
数据结构(朱战立)章 (7)
7.1 树
7.1.1 树的定义 树是由n(n≥0)个结点构成的集合。 n=0的树称为空树;
对n>0的树T有: (1) 有一个特殊的结点称为根结点, 根结点没有前驱结点;
3
(2) 当n>1时, 除根结点外其他结点被分成m(m>0)个互不相 交的集合T1, T2,…, Tm, 其中每一个集合Ti(1≤i≤m)本身又 是一棵结构和树类同的子树。
10
7.1.2 树的表示方法 树的表示方法主要有三种, 分别用于不同的用途。 1. 直观表示法 图7 - 1就是一棵以直观表示法表示的树。 树的直观表示法
主要用于直观描述树的逻辑结构。 2. 形式化表示法 树的形式化表示法主要用于树的理论描述。 树的形式化表
示法定义树T为T=(D,R),其中D为树T中结点的集合, R为树T 中结点之间关系的集合。 当树T为空树时D=∅; 当树T不为空树 时有
5ቤተ መጻሕፍቲ ባይዱ
下面介绍树的其他一些常用术语。 结点: 由数据元素和构造数据元素之间关系的指针组成。 例如, 在图7 - 1(a)中有1个结点, 图7 - 1(b)中有12个结点。 结点的度: 结点所拥有的子树的个数称为该结点的度。 例 如, 在图7 - 1(b)中结点A的度为3, 结点B的度为2, 结点J的 度为0。 叶结点: 度为0的结点称为叶结点, 叶结点也称作终端结 点。 例如, 在图7 - 1(b)中结点J,F,K,L,H,I均为叶结点。
6
分支结点: 度不为0的结点称为分支结点, 分支结点也称 作非终端结点。 显然, 一棵树中除叶结点外的所有结点都是分 支结点。
孩子结点: 树中一个结点的子树的根结点称作这个结点的 孩子结点。 例如, 在图7 - 1(b) 中结点B,C,D是结点A的孩 子结点。 孩子结点也称作后继结点。
数据结构:第7章 图3-最小生成树
• 按照生成树的定义,n 个顶点的连通网络的生成树有 n
个顶点、n-1 条边。
即有权图
目标:
在网络的多个生成树中,寻找一个各边权值之和最小的
生成树。
构造最小生成树的准则 ❖ 必须只使用该网络中的边来构造最小生成树;
❖ 必须使用且仅使用n-1条边来联结网络中的n个顶点;
❖ 不能使用产生回路的边。
典型用途:
(b) u={1} w={2,3,4,5,6}
0 6 1 5
6
0
5
3
1 5 0 7 5 4
5
7
0
2
3 5 0 6
4 2 6 0
i
1234
closest[i] 1 1 1 1
lowcost[i] 0 6 1 5
56 11 ∞∞
closest用于存放顶点序号 lowest存放权值
15 4 6
1 25
3
54
5
6
(c ) u={1,3} w={2,4,5,6}
1
1
4
25
6
32
54
5
6
(d) u={1,3,6} w={2,4,5}
i
1234 5 6
closest[i] 1 3 1 1 3 3
lowcost[i] 0 5 0 5 5 4
i
1234 5 6
closest[i] 1 3 1 6 3 3
生
v3 v1
成
树 v4 v2
v1
0^ 1^ 0^ 1^
2.生成森林
若一个图是非连通图或非强连通图,但有若 干个连通分量或若干个强连通分量,则通过 深度优先搜索遍历或广度优先搜索遍历,不 可以得到生成树,但可以得到生成森林,且 若非连通图有 n 个顶点,m 个连通分量或强 连通分量,则可以遍历得到m棵生成树,合 起来为生成森林,森林中包含n-m条树边。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2013-8-20
3
树、森林的概念及术语
树的定义还可形式化的描述为二元组的形式: T=(D,R) 其中D为树T中结点的集合,R为树中结点之间关系的集合。 当树为空树时,D=Φ;当树T不为空树时有: D={Root}∪DF 其中,Root为树T的根结点,DF 为根结点Root的子树集合。DF可由 下式表示: DF =T1∪T 2∪…∪T m , 且T i∩T j=Φ(i≠j,1≤i≤m, 1≤j≤m) 当树T的结点个数n≤1时,R=Φ;当树T的结点个数n>1时有: R={<Root,ri>,i=1,2,…,m} 其中,Root为树T的根结点,ri是树T的根结点Root的子树Ti的根结点。
第7章
7.1 7.2 7.3 7.4
二叉树
树的概念与ADT定义 树、森林的存储结构 树、森林与二叉树的转换 树、森林的遍历
1
2013-8-20
本章主要内容
一、树的概念、术语、性质及ADT定义 二、树、森林的4类存储结构 三、树、森林与二叉树的转换 四、树、森林的遍历方法
返回首页
2013-8-20 2
2013-8-20
16
双亲表示法
例如:下图所示的树,其双亲表示法如右图所示。图中用parent域的值为1表示该结是根结点,无双亲结点。
序号
0
A
data A B C D E F G H I
parent -1 0 0 1 1 1 2 4 4
17
1
B C
2 3
D
E
F
G
4 5
H
I
6 7 8
2013-8-20
2013-8-20
2013-8-20
13
树与森林的性质
性质4.一棵具有n个结点的k叉树,其最小深度为 [log k (n (k-1))]+1。 性质5.设一棵具有n个结点的树中有度为0、1、2、…、m的结点个 数分别为: n n0、n1、n2、…、nm 个,则n0 = 1+ (i 1)ni 。
i 1
性质6.设森林中的所有树共包含n个结点和m条边,则该森林必含nm棵树。
2013-8-20
7
树、森林的概念及术语
三、树的表示法
1.图形表示法 2.集合嵌套表示法 3.凹入表表示法 4.广义表表示法
A
A
C G
B D E H
B H E I
D F
I F C G
(a)
(b)
2013-8-20
8
7.1.2 树的ADT定义
数据操作P: 1、初始化一棵空树InitTree(&T)。 操作结果:构造一棵空树,返回根结点指针。 2、创建一棵树CreateTree(&T,n)。 初始条件:树T已初始化为空树。 操作结果:构造一棵含n个结点的树,返回根结点指针。 3.清空一棵树ClearTree(&T)。 初始条件:树T已存在。 操作结果:将树T清为空树,释放所有结点,返回根结点指针。 4.撤消一棵树ClearTree(&T)。 初始条件:树T已存在。 操作结果:将树T撤消。 5.判断树是否为空树TreeEmpty(T)。 初始条件:树T已存在。 操作结果:若树T为空树,则返回TRUE,否则返回FALSE。
二、 孩子表示法
1.多重链表表示法
(1) 不等长结点结构。每个结点指针域的个数等于该结点的度数; (2) 等长结点结构。每个结点指针域的个数等于树的度数。假设树 的度为k,所有结点都含k个指针域,另外增加一个度数域degre , 存放结点的度。 结点结构如图所示。
2013-8-20
18
三、孩子链表表示法
2013-8-20 22
五、孩子兄弟表示法
在树中,每个结点除数据信息域外,再增加两个分别指向该结点 的最左边的第一个孩子结点和第一个兄弟结点的指针。存储表示的结 点结构如图所示。
firstchild data nextsibling
存储结构定义如下:
typedef struct CSNode { TElemType data; struct CSNode *firstchild , *nextsibling ; } CSNode , *CSTree ;
2013-8-20
6
树、森林的概念及术语
按结点的层次关系,可以将结点划分几类。相邻两层之间,具有 相同根结点的下层结点称为上层结点的子女结点。上层结点称为下层 结点的双亲结点。间隔层次之间的结点,上面的称为祖先结点,下面 的称为子孙结点。同层的结点若是同父则称为兄弟结点,不同父的称 为堂兄结点。 当一棵树中任何结点的各子树从左到右规定是有次序的,若交换 了某结点各子树的相对位置,则构成不同的树,则称这棵树为有序树; 反之,则称为无序树。 由零棵或有限棵不相交的树构成的集合称为森林。任何一棵树, 删去根结点就变成了森林,对任何森林,增加一个根结点,将森林的 每棵树作为子树,就构成树。
7.1 树的概念与ADT定义
7.1 树、森林的概念及术语
一、树的定义
树(Tree)是n(n≥0)个有限数据元素的集合,当n=0时,称 为空树。在一棵非空的树T中: (1)有一个特殊的数据元素称为树的根结点,该结点没有前驱结 点。 (2)若n>1时,除根结点之外的其余数据元素被分成m(m>0) 个互不相交的集合T1,T2,…,Tm,其中每一个集合Ti(1≤i≤m) 本身又是一棵树。称T1,T2,…,Tm为这个根结点的子树。
2013-8-20
10
树的ADT定义
10.取某个非根结点的双亲结点Parent(T, cur_e)。 初始条件:树T已存在,cur_e是树中某个结点。 操作结果:返回结点cur_e的双亲结点值。 11.取某个结点的最左边的孩子结点值LeftChild(T, cur_e)。 初始条件:树T已存在,cur_e是树中某个结点。 操作结果:若cur_e是非叶结点,则返回cur_e的最左边孩子结 点,否则返回空。 12.取某个结点的最右边的孩子结点值RightChild(T, cur_e)。 初始条件:树T已存在,cur_e是树中某个结点。 操作结果:若cur_e有右兄弟结点,则返回cur_e的最右兄弟结 点的值,否则返回空。
Data firstchild 0 1 ... i ... n-1 n r 结点个数域 根节点位置域 Child next ...
... ...
2013-8-20
19
三、孩子链表表示法
存储结构定义如下:
#define MAXSIZE 100 // 定义结点最大个数 typedef struct CTNode { // 定义孩子链表结点类型 int child ; struct CTNode *next ; } *Childptr ; typedef struct { // 定义数组元素结点类型 TElemType data ; Childptr firstchild ; } CTBos ; typedef struct { // 定义结点数组类型 CTBos nodes[ MAXSIZE ] ; Int n , r ; // 结点个数与根结点位置 } CTree ;
2013-8-20 9
树的ADT定义
6.求树的深度TreeDepth(T)。 初始条件:树T已存在。 操作结果:返回树的深度。 7.取根结点的值Root(T, &e)。 初始条件:树T已存在。 操作结果:由e返回树T根结点的值。 8.取某个结点的值Value(T, cur_e ,)。 初始条件:树T已存在,cur_e是树中某个结点。 操作结果:返回结点cur_e的值。 9.为某个结点赋值Assign(T, cur_e , value)。 初始条件:树T已存在,cur_e是树中某个结点。 操作结果:将结点cur_e赋值为value。
n r 结点个数域 根节点位置域
...
2013-8-20
21
四、双亲孩子表示法
存储表示描述:
#define MAXSIZE 100 // 定义结点最大个数 typedef struct CTNode { // 定义孩子链表结点类型 int child ; struct CTNode *next ; } *Childptr ; typedef struct { // 定义数组元素结点类型 int parent ; TElemType data ; Childptr firstchild ; } CTBos ; typedef struct { // 定义结点数组类型 CTBos nodes[ MAXSIZE ] ; int n , r ; // 结点个数与根结点位置 } CTree ;
2013-8-20
15
双亲表示法
存储结构定义如下:
# define MAXNODE 100 // 树中结点的最大个数 typedef struct PTNode { // 数组元素结构 TElemType data; // 数据元素 int parent ; // 双亲指针 } PTNode ; typedef struct { // 树的存储结构 PTNode data[ MAXNODE ] ; // 数组域 int r , n ; // 根结点指针和结点个数 } Ptree ;
返回首页
2013-8-20 14
7.2 树与森林的存储结构
一、 双亲表示法 。用一组连续的存储空间(一维数组)存储树中
的各个结点,数组中的每个元素表示树的一个结点,数组元素为结构 体类型,其中包括结点本身的信息以及结点的双亲结点在数组中的序 号,树的这种存储方法称为双亲表示法。
如图:
0 data r parent 结点数组域 n 1 2 … i … n-1
2013-8-20
12
7.1.3 树与森林的性质
性质1.设一棵树有n个结点,边数为 e ,则e = n-1,且e等于各结点 的度数之和。