150 likes | 249 Views
数据结构. (第八讲). 绍兴文理学院. 计算机系计算机应用教研室. 数据的一对多关系是怎样 描述 的?. 第 6 章 树和二叉树( 1 ). 一、教学目的: 明确树的概念、基本术语的含义和 树的抽象数据类型的定义;掌握树的表示方法 。. 二、教学重点: 树的概念、基本术语的含义、 树的表示方法和树的抽象数据类型的定义 。. 三、教学难点: 树的概念; 树的抽象数据类型的定义 。 四、教学过程:. §5.1 树的定义和基本术语. TKS. 4. 树形结构是一种重要的非线性结构,讨论的是层次和分支关系。 §5.1. 1 树的定义 1 、树的定义
E N D
数据结构 (第八讲) 绍兴文理学院 计算机系计算机应用教研室
第6章 树和二叉树(1) 一、教学目的:明确树的概念、基本术语的含义和树的抽象数据类型的定义;掌握树的表示方法。 二、教学重点:树的概念、基本术语的含义、树的表示方法和树的抽象数据类型的定义。 三、教学难点:树的概念;树的抽象数据类型的定义。 四、教学过程:
§5.1 树的定义和基本术语 TKS 4 树形结构是一种重要的非线性结构,讨论的是层次和分支关系。 §5.1.1 树的定义 1、树的定义 树是n(n≥0)个结点的有限集,在任意一棵非空树中满足下面两个条件: (1) 有且仅有一个特定的称为根的结点; (2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2, …,Tm,其中每个集合本身又是一棵树,并且称为根的子树。 树是递归定义的,在树的定义中又用到了树的概念。 11:07
2、图示 D J I A B F C G E K L M H A TKS 5 T={A, B, C, D, E, F, G, H, I, J,K,L,M} A是根,其余结点可以划分为3个互不相交的集合: T1={B, E, F,K,L}, T2={C, G}, T3={D, H, I, J,M} 这些集合中的每一集合都本身又是一棵树,它们是A的子树。 例如,对于 T1,B是根,其余结点可以划分为2个互不相交的集合:T11={E,K,L},T12={F},T11,T12是B的子树。 11:07
3、树的应用 J I A C D H B F E K L M G TKS 6 (1) 树可表示具有分支结构关系的对象 例1 家族族谱 设某家庭有13个成员A、B、C、D、E、F、G、H、I、J,K,L,M,他们之间的关系可用图所示的树表示: 11:07
2 单位行政机构的组织关系 TKS 7 局 科1 科2 科3 室1 室1 室2 室3 室1 室2 室3 室2 室3 人… 人… 人… 人… 人… 人… 人… 人… 人… 11:07
(2) 树是常用的数据组织形式 C 文件夹1 文件夹n 文件1 文件2 文件夹11 文件夹12 文件11 文件12 TKS 8 有些应用中数据元素之间并不存在间分支结构关系,但是为了便于管理和使用数据,将它们用树的形式来组织。 例3 计算机的文件系统 不论是DOS文件系统还是window文件系统,所有的文件是用树的形式来组织的。 11:07
4、树的抽象数据类型定义 TKS 9 ADT Tree { 数据对象 D:D是具有相同特性的数据元素的集合。 数据关系 R:若D为空集,则称为空树;若D仅含一个数据元素, 则 R为空集,否则 R={H},H是如下二元关系: (1) 在D中存在唯一的称为根的数据元素root它在关系H下无前驱; (2)若D-{root}≠ф,则存在D-{root}的一个划分D1,D2,…,Dm, (m>0),对任意j≠k(1≤j,k≤m)有Dj∩Dk=ф,且对任意的i(1≤i≤m),唯一存在数据元素xiDi,有<root,xi>H; (3) 对应于D-{root}的划分,H-{<root,x1>,…,<root,xm>}有惟一的一个划分H1,H2,…,Hm(m>0),对任意j≠k(1≤j,k≤m) 有Hj∩Hk=ф,且对任意的i(1≤i≤m),Hi是Di上的二元关系, (Di,{Hi})是一棵符合本定义的树,称为根root的子树。 11:07
基本操作 P: TKS 10 initTree(&T); 操作结果:构造空树 T。 CreateTree(&T,definition); 初始条件:definition 给出树 T 的定义。 操作结果:按definition 构造树 T。 TreeDepth(T); 初始条件:树 T 存在。 操作结果:返回树 T 的深度。 Value(T,cur_e); 初始条件:树 T 存在,cur_e 是 T 中某个结点。 操作结果:返回 cur_e 的值。 Assign(T,cur_e,value); 初始条件:树 T 存在,cur_e 是 T 中某个结点。 操作结果:结点cur_e 赋值为 value。 11:07
Parent(T,cur_e); TKS 11 初始条件:树 T 存在,cur_e 是 T 中某个结点。 操作结果:若 cur_e 是 T 的非根结点,则返回它的双亲,否 则函数值为空。 LeftChild(T,cur_e); 初始条件:树 T 存在,cur_e 是 T 中某个结点。 操作结果:若 cur_e 是 T 的非叶子结点,则返回它的最左孩 子,否则返回空。 RightSibling(T,cur_e); 初始条件:树 T 存在,cur_e 是 T 中某个结点。 操作结果:若 cur_e 有右兄弟,则返回它的右兄弟,否则函 数值为空。 TraverseTree(T,Visit()); 初始条件:树 T 存在,Visit 是对结点操作的应用函数。 操作结果:按某种次序对T的每个结点调用函数 Visit() 一次 且最多一次。一旦 Visit()失败,则操作失败。 11:07
}ADT Tree C J A D H G I E K L M B F A B E K J L K L M F F C I G C D B G D A H M E I H J TKS 12 5、树的其他表示形式 (1) 嵌套集合 ③ 凹入表 (2) 广义表 (A(B(E(K,L),F),C(G),D(H(M),I,J))) 11:07
§5.1.2树的基本术语 D J I A B G C F E K L M H TKS 13 (1) 结点(node):数据元素+若干指向其子树的分支; (2)结点的度(degree):结点拥有的子树(分支)数; (3) 树的度:树中所有结点的度的最大值; (4) 叶子(终端结点 leaf):度为0的结点; (5) 分支结点(非终端结点、内部结点):度不为0的结点; (6) 孩子(child):结点子树的根; (7) 双亲(parent):结点子树的根对该结点的称呼; (8)兄弟(sibling):同一双亲的孩子之间的称呼; (9) 祖先:根结点到该结点所经分枝上的所有结点; (10) 子孙:某结点为根的子树中的任一结点对该结点的称呼; 11:07
(11)层次(level):从根结点开始定义.根为第一层,根的孩子为第二层,若某结点在第 L 层,则其子树的根就示第 L+1 层; TKS 14 (12) 堂兄弟:其双亲在同一层的结点; (13) 树的深度(高度 depth):树中结点的最大层次; (14) 有序树:各子树看成从左至右是有次序的(即不能互换); (15) 无序树:各子树从左至右是无序的(即能互换) ; (16) 森林(forest):m(m≥0)棵树互不相交的集合。 ▲树型结构和线性结构的对比 线性结构 树型结构 第一个数据元素(无前驱) 根结点(无前驱) 最后一个数据元素(无后继) 多个叶子结点(无后继) 其它数据元素(一个前驱、多个后继) 其它数据元素(一个前驱、一个后继) 11:07
五、作业: TKS 15 ? 上机编程: (数据结构编程练习)中 8831、8832、8833、 8836、8841 (已布置) 11:07