- 1、本文档共109页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《数据结构》--树解读
计科系 王丹丹
第6章 树
主要内容
树的定义和存储结构
二叉树的定义、性质和存储结构
二叉树的遍历、建立和线索化
树、森林与二叉树的转换
赫夫曼树及其应用
重点和难点
二叉树的数组、结构数组及链表的表示法
二叉树的建立算法
二叉树的遍历算法(前序、中序、后序)
二叉树的查找算法
二叉树的结点删除算法
6.1 开场白
AVATAR
6.2 树的定义
树的表示法
A
B
C
D
E
F
H
I
J
G
根结点
6.2.1 结点分类
树的结点
结点的度
叶结点
分支结点
包含一个数据元素及若干指向其子树的分支。
结点拥有的子树数。(Degree)
度为0的结点。(终端结点)
度不为0的结点。(非终端结点/内部结点)
树的度
树内各结点的度的最大值。
例:思考结点A、B、C、D、E、J是什么类型,度是多少?
A
B
C
D
E
F
H
I
J
G
6.2.2 结点间关系
孩子结点(Child)
结点的子树的根称为该结点的孩子。
双亲结点(Parent)
孩子结点的上层结点叫该结点的双亲结点。
祖先结点(ancestor)
从根到该结点的所经路径上的所有结点均称为祖先结点。
兄弟结点(Sibling)
同一双亲的孩子互称为兄弟结点。
堂兄弟结点(Cousin)
双亲在同一层上的结点互称为堂兄结点。
子孙结点
以某结点为根的子树中任一结点都称为该结点的子孙结点。
思考:结点E的孩子、双亲、兄弟、堂兄弟、祖先、子孙结点分别是哪些?
A
B
C
D
E
F
H
I
J
G
6.2.3 树的其他相关概念
结点的层次(Level)从根开始定义起。
树的深度(Depth)/高度:树中结点的最大层次。
A
B
C
D
E
F
H
I
J
G
第一层
第二层
第三层
第四层
深度为4
有序树和无序树
如果将树中结点的各子树看成从左至右是有秩序的,不能互换的,则称该树为有序树,否则称为无序树。
森林(Forst)
m(m≥0)棵互不相交的树的集合。对树中每个结点而言,其子树的集合即为森林。
对比线性表与树的结构
线性结构
第一个数据元素:无前驱
最后一个数据元素:无后继
中间元素:一个前驱一个后继
树结构
根结点:无双亲,唯一
叶结点:无孩子,可以多个
中间结点:一个双亲多个孩子
6.3 树的抽象数据类型
ADT 树(Tree)
Data
树是由一个根结点和若干棵子树构成。树中结点具有相同数据类型及层次关系。
Operation
InitTree(*T):构造空树。
Destroy(*T):销毁树T。
CreateTree(*T,definition):按definition中给出树的定义来构造树。
ClearTree(*T):若树T存在,则将树T清为空树。
TreeEmpty(*T):若T为空树,返回true,否则返回false。
接上页
TreeDepth(*T):返回T的深度。
Root(T):返回T的根结点。
Value(T,cur_e):cur_e是树T中一个结点,返回此结点的值。
Assign(T,cur_e,value):给树T的结点cur_e赋值为value。
Parent(T,cur_e):若cur_e是树T的非根结点,则返回它的双亲,否则返回空。
LeftChild(T,cur_e):若cur_e是树T的非叶结点,则返回它的双亲,否则返回空。
接上页
RightSibling(T,cur_e):若cur_e有有兄弟,则返回它的右兄弟,否则返回空。
InisertChild(*T,*p,i,c):其中p指向树T的某个结点,i为所指结点p的度上加1,非空树c与T不相交,操作结果为插入c为树T中p指结点的第i棵子树。
DeleteChild(*T,*p,i):其中p指向树T的某个结点,i为所指结点p的度,操作结果为删除T中p指结点的第i棵子树。
endADT
6.4 树的存储结构
链式存储
顺序存储
结点的存储位置无法直接反映逻辑关系。
充分利用二者的特点完全可以实现对树的存储结构的表示!!
6.4.1 双亲表示法
假设以一组连续空间存储树的结点,同时在每个结点中,附设一个指示器指示其双亲结点在数组中的位置。其结点结构为:
data是数据域,存储结点的数据信息;
parent是指针域,存储该结点的双亲在数组中的下标。
约定根结点的位置域为-1,则所有的结点都存有它双亲的位置。
data
parent
双亲表示法的结点结构定义代码
/*树的双亲表示法结点结构定义*/
#define MAX_TREE_SIZE 100
typedef int TElemType; //树结点的数据类型
typedef struct PTNode //结点结构
文档评论(0)