- 1、本文档共200页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1
2
6.1 树的定义和基本术语
6.2 二叉树
6.3 二叉树的遍历和线索二叉树
6.4 树和森林
6.6 哈夫曼树与哈夫曼编码
3
树是一类重要的非线性数据结构,是以分支关系定义的层次结构。
4
6.1
树的定义和
基本术语
5
树(tree)是n(n≥0)个结点的有限集T,其中:
(1)有且仅有一个特定的结点,称为树的根(root);
(2)当n1时,其余结点可分为m(m0)个互不相交的有限集T1,T2,……Tm,其中每一个集合本身又是一棵树,称为根的子树(subtree)。
6.1.1 定义
6
树的递归定义刻画了树的固有特性:一棵非空树是由若干棵子树构成的,而子树又可由若干棵更小的子树构成。
7
A
只有根结点的树
有子树的树
子树
树的实例
8
数据对象 D:
D是具有相同特性的数据元素的集合。
若D为空集,则称为空树; 否则:
(1) 在D中存在唯一的称为根的数据元素root,
(2) 当n1时,其余结点可分为m (m0)个互
不相交的有限集T1, T2, …, Tm, 其中每一
棵子集本身又是一棵符合本定义的树,
称为根root的子树。
数据关系 R:
6.1.2 抽象类型定义
9
基本操作:
查 找 类
插 入 类
删 除 类
10
Root(T) // 求树的根结点
查找类:
Value(T, cur_e) // 求当前结点的元素值
Parent(T, cur_e) // 求当前结点的双亲结点
LeftChild(T, cur_e) // 求当前结点的最左孩子
RightSibling(T, cur_e) // 求当前结点的右兄弟
TreeEmpty(T) // 判定树是否为空树
TreeDepth(T) // 求树的深度
TraverseTree( T, Visit() ) // 遍历
11
InitTree(T) // 初始化置空树
插入类:
CreateTree(T, definition)
// 按定义构造树
Assign(T, cur_e, value)
// 给当前结点赋值
InsertChild(T, p, i, c)
// 将以c为根的树插入为结点p的第i棵子树
12
ClearTree(T) // 将树清空
删除类:
DestroyTree(T) // 销毁树的结构
DeleteChild(T, p, i)
// 删除结点p的第i棵子树
13
6.1.3 基本术语
14
结点:
结点的度:
树的度:
叶子结点:
分支结点:
数据元素+若干指向子树的分支
分支的个数
树中所有结点的度的最大值
度为零的结点
度大于零的结点
D
H
I
J
M
15
(从根到结点的)路径:
孩子结点、双亲结点、
兄弟结点、堂兄弟
祖先结点、子孙结点
结点的层次:
树的深度:
由从根到该结点所经分支和结点构成
A
B
C
D
E
F
G
H
I
J
M
K
L
假设根结点的层次为1,第l 层的结点的子树根结点的层次为l+1
树中叶子结点所在的最大层次
16
任何一棵非空树是一个二元组
Tree = (root,F)
其中:root 被称为根结点,
F 被称为子树森林
森林:
是m(m≥0)棵互
不相交的树的集合
A
root
B
C
D
E
F
G
H
I
J
M
K
L
F
17
结点A的度:3
结点B的度:2
结点M的度:0
叶子:K,L,F,G,M,I,J
结点A的孩子:
B,C,D
结点B的孩子:
E,F
结点I的双亲:D
结点L的双亲:E
结点B,C,D为兄弟
结点K,L为兄弟
树的度:3
结点A的层次:1
结点M的层次:4
树的深度:4
结点F,G为堂兄弟
结点A是结点F,G的祖先
18
6.1.4 树的表示
1.树型表示
19
2.凹入表表示
20
3.嵌套集合表示
嵌套括号表示
a ( b ( d, e ( i, j ),f), c ( g, h ) ) )
21
6.1.5 对比树型结构和线性结构的结构特点
22
线性结构
树型结构
第一个数据元素
(无前驱)
根结点
(无前驱)
最后一个数据元素
(无后继)
多个叶子结点
(无后继)
其它数据元素
(一个前驱、
一个后继)
其它数据元素
(一个前驱、
多个后继)
23
6.2
二叉树
24
6.2.
文档评论(0)