数据结构第六章树和二叉树.ppt
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
线性表
A 线性结构
栈
队 1.数据的逻辑结构
数 据
树形结构 B 非线性结构
结
构
图形结构
的
三 个
2、数据的存储结构 A 顺序存储
方 面
B 链式存储
3、数据的运算:检索、排序、插入、删除、修改等。
第六章 树和二叉树
6.1 树的定义和基本术语 6.2 二叉树
6.2.1 二叉树的定义 6.2.2 二叉树的性质 6.2.3 二叉树的存储结构
TraverseTree ( T,Visit() ) ; 初始条件:树t存在, Visit是对结点操作的应用函数。 操作结果:按某种次序对T的每个结点调用函数Visit ()一次且至 多一次。一旦Visit ()失败,则操作失败。
堂兄弟——其双亲在同一层的结点互为堂兄弟。K L
M
结点的层次(level)——从根结点算起,根为第一层,它的孩子为第二层…。
深度(depth)——树中结点的最大层次数。
森林(forest)——m(m0)棵互不相交的树的集合。
树的抽象数据类型定义:
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),唯一存在数据元素xi∈Di,有<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的子 树。
树的抽象数据类型定义--基本操作(之一)
InitTree(&T); 操作结果:构造空树T。
DestroyTree (&T) ; 初始条件:树T存在。 操作结果:销毁树T。
CreateTree (&T,definition ) ; 初始条件: definition给出树T的定义。 操作结果:按definition构造树T。
合又是一棵树,并称其为根的子树(SubTree)。 A
➢这是一个递归定义。有时n=0也称为空树。
B
C
T1
E
F
G
D
HI
J
K
L
T2
M
T3
树的表示方法
1)树形图法
A
BCD
EF
G
2)嵌套集合法
3)广义表形式 ( A(B, C(E,F), D(G) ) )
4)凹入表示法
A B
D
CG
EF
A
B C
E DF
G
树形结构和线性结构的比较
6.3 遍历二叉树和线索二叉树
6.3.1 遍历二叉树 6.3.2 线索二叉树
6.4ห้องสมุดไป่ตู้树和森林
6.4.1 树的存储结构 6.4.2 森林与二叉树的转换
6.6 赫夫曼树及其应用
6.6.1 最优二叉树(赫夫曼树) 6.6.2 赫夫曼编码
树形结构是一类重要的非线性结构。树形结构是结点之间有分支, 并具有层次关系的结构。它非常类似于自然界中的树。
LeftChild(T, cur_e ) 初始条件:树T存在,cur_e是T中某个结点。 操作结果:若cur_e是T的非叶子结点,则返回它的最左孩子,否则返 回 “空”。
RightSibling(T, cur_e ) 初始条件:树T存在,cur_e是T中某个结点。 操作结果:若cur_e有右兄弟,则返回它的右兄弟,否则函数值为 “空”。
A
D
B
C
E F GH
A
B
C
D
E
F
G
H
树形结构 —— 结点间具有分层次的连接关系
6.1 树的定义和基本术语
树(Tree)是n(n>0)个结点的有限集合T,它满足如下条件:
➢有且仅有一个称为根(Root)的结点。 ➢其余结点可划分为m(m>=0)个互不相交的有限集合T1 ,T2,…,Tm,其中每个集
ClearTree(&T ) ; 初始条件:树T存在。 操作结果:将树T清为空树。
树的抽象数据类型定义--基本操作(之二)
TreeEmpty(T) 初始条件:树T存在。 操作结果:若T为空树,则返回TURE,否则FALSE。
TreeDepth(T) 初始条件:树T存在。 操作结果:返回T的深度。
Root(T ) 初始条件:树T存在。 操作结果:返回T的根。
结点的度(degree)——结点拥有的子树数。
A
叶子(leaf)或终端结点——度为0的结点。
分支结点——度大于零的结点。 树的度——树中所有结点的度的最大值。
BC
D
孩子(child)——结点的子树的根。 双亲(parents)——孩子结点的上层结点。
E F GH I J
兄弟(sibling)——同一双亲的孩子。
Value(T, cur_e) ; 初始条件:树T存在, cur_e是T中某个结点。 操作结果:返回cur_e的值。
树的抽象数据类型定义--基本操作(之三)
Assign(T,cur_e,value) 初始条件:树T存在,cur_e是T中某个结点。 操作结果:结点cur_e赋值 为value 。
Parent(T, cur_e ) 初始条件:树T存在,cur_e是T中某个结点。 操作结果:若cur_e是T的非根结点,则返回它的双亲,否则 函数值为“空”。
树的抽象数据类型定义--基本操作(之四)
InsertChild(&T,&p,i,c); 初始条件:树T存在,p指向T中某个结点,1≤i≤p所指结点的度+ 1,非空树c与T不相交。 操作结果:插入c为T中p指结点的第i棵子树。
DeleteChild (&T,&p,i ) ; 初始条件:树T存在,p指向T中某个结点,1≤i≤p指结点的度。 操作结果:删除T中p所指结点的第i棵子树。
线性结构 (一对一关系) 第一个数据元素(无前驱) 最后一个数据元素(无后继) 其它数据元素 (一个前驱、一个后继)
树结构(一对多关系) 根结点(无前驱) 多个终端结点(无后继) 树中其它结点 (一个前驱、多个后继)
树结构的基本术语
结点(node)——表示树中的元素,包括数据元素及若干指向其子树的分支。
A 线性结构
栈
队 1.数据的逻辑结构
数 据
树形结构 B 非线性结构
结
构
图形结构
的
三 个
2、数据的存储结构 A 顺序存储
方 面
B 链式存储
3、数据的运算:检索、排序、插入、删除、修改等。
第六章 树和二叉树
6.1 树的定义和基本术语 6.2 二叉树
6.2.1 二叉树的定义 6.2.2 二叉树的性质 6.2.3 二叉树的存储结构
TraverseTree ( T,Visit() ) ; 初始条件:树t存在, Visit是对结点操作的应用函数。 操作结果:按某种次序对T的每个结点调用函数Visit ()一次且至 多一次。一旦Visit ()失败,则操作失败。
堂兄弟——其双亲在同一层的结点互为堂兄弟。K L
M
结点的层次(level)——从根结点算起,根为第一层,它的孩子为第二层…。
深度(depth)——树中结点的最大层次数。
森林(forest)——m(m0)棵互不相交的树的集合。
树的抽象数据类型定义:
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),唯一存在数据元素xi∈Di,有<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的子 树。
树的抽象数据类型定义--基本操作(之一)
InitTree(&T); 操作结果:构造空树T。
DestroyTree (&T) ; 初始条件:树T存在。 操作结果:销毁树T。
CreateTree (&T,definition ) ; 初始条件: definition给出树T的定义。 操作结果:按definition构造树T。
合又是一棵树,并称其为根的子树(SubTree)。 A
➢这是一个递归定义。有时n=0也称为空树。
B
C
T1
E
F
G
D
HI
J
K
L
T2
M
T3
树的表示方法
1)树形图法
A
BCD
EF
G
2)嵌套集合法
3)广义表形式 ( A(B, C(E,F), D(G) ) )
4)凹入表示法
A B
D
CG
EF
A
B C
E DF
G
树形结构和线性结构的比较
6.3 遍历二叉树和线索二叉树
6.3.1 遍历二叉树 6.3.2 线索二叉树
6.4ห้องสมุดไป่ตู้树和森林
6.4.1 树的存储结构 6.4.2 森林与二叉树的转换
6.6 赫夫曼树及其应用
6.6.1 最优二叉树(赫夫曼树) 6.6.2 赫夫曼编码
树形结构是一类重要的非线性结构。树形结构是结点之间有分支, 并具有层次关系的结构。它非常类似于自然界中的树。
LeftChild(T, cur_e ) 初始条件:树T存在,cur_e是T中某个结点。 操作结果:若cur_e是T的非叶子结点,则返回它的最左孩子,否则返 回 “空”。
RightSibling(T, cur_e ) 初始条件:树T存在,cur_e是T中某个结点。 操作结果:若cur_e有右兄弟,则返回它的右兄弟,否则函数值为 “空”。
A
D
B
C
E F GH
A
B
C
D
E
F
G
H
树形结构 —— 结点间具有分层次的连接关系
6.1 树的定义和基本术语
树(Tree)是n(n>0)个结点的有限集合T,它满足如下条件:
➢有且仅有一个称为根(Root)的结点。 ➢其余结点可划分为m(m>=0)个互不相交的有限集合T1 ,T2,…,Tm,其中每个集
ClearTree(&T ) ; 初始条件:树T存在。 操作结果:将树T清为空树。
树的抽象数据类型定义--基本操作(之二)
TreeEmpty(T) 初始条件:树T存在。 操作结果:若T为空树,则返回TURE,否则FALSE。
TreeDepth(T) 初始条件:树T存在。 操作结果:返回T的深度。
Root(T ) 初始条件:树T存在。 操作结果:返回T的根。
结点的度(degree)——结点拥有的子树数。
A
叶子(leaf)或终端结点——度为0的结点。
分支结点——度大于零的结点。 树的度——树中所有结点的度的最大值。
BC
D
孩子(child)——结点的子树的根。 双亲(parents)——孩子结点的上层结点。
E F GH I J
兄弟(sibling)——同一双亲的孩子。
Value(T, cur_e) ; 初始条件:树T存在, cur_e是T中某个结点。 操作结果:返回cur_e的值。
树的抽象数据类型定义--基本操作(之三)
Assign(T,cur_e,value) 初始条件:树T存在,cur_e是T中某个结点。 操作结果:结点cur_e赋值 为value 。
Parent(T, cur_e ) 初始条件:树T存在,cur_e是T中某个结点。 操作结果:若cur_e是T的非根结点,则返回它的双亲,否则 函数值为“空”。
树的抽象数据类型定义--基本操作(之四)
InsertChild(&T,&p,i,c); 初始条件:树T存在,p指向T中某个结点,1≤i≤p所指结点的度+ 1,非空树c与T不相交。 操作结果:插入c为T中p指结点的第i棵子树。
DeleteChild (&T,&p,i ) ; 初始条件:树T存在,p指向T中某个结点,1≤i≤p指结点的度。 操作结果:删除T中p所指结点的第i棵子树。
线性结构 (一对一关系) 第一个数据元素(无前驱) 最后一个数据元素(无后继) 其它数据元素 (一个前驱、一个后继)
树结构(一对多关系) 根结点(无前驱) 多个终端结点(无后继) 树中其它结点 (一个前驱、多个后继)
树结构的基本术语
结点(node)——表示树中的元素,包括数据元素及若干指向其子树的分支。