- 1、本文档共73页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构_第六章 树和二叉树
第6章 树和二叉树;6.1 树的基本概念;T = { A,B,C,D,E,F,G,H,I,J,K,L }
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的子树。;1. 树中只有根结点没有前驱;2. 除根外,其余结点都有且仅一个前驱;
3. 树的结点,可以有零个或多个后继;4. 除根外的其它结点,都存在唯一条从
根到该结点的路径;
5. 树是一种分支结构(除了
一个称为根的结点外)每个
元素都有且仅有一个直接前
趋,有且仅有零个或多个直
接后继。; 树可表示具有分支结构关系的对象
例1. 家族族谱
设某家庭有13个成员A、B、C、D、E、F、G、H、I、J、K、L、M,他们之间的关系可如图所示的树表示。
例2. 单位行政机构的组织关系; 树是常用的数据组织形式 有些应用中数据元素之间并不存在分支结构关系,但是为了便于管理和使用数据,将它们用树的形式来组织。例3. 计算机的文件系统 不论是DOS文件系统还是window文件系统,所有的文件是用树的形式来组织的。
;树的结点:包含一个数据元素的
内容及若干指向子树的分支。
孩子结点:结点的子树的根称为
该结点的孩子;如E是B的孩子。
双亲结点:B结点是A结点的孩子,
则A结点是B结点的双亲;如B是E的双亲。
兄弟结点:同一双亲的孩子结点;如H、I、J互为兄弟。
堂兄结点:同一层上结点;如G与E、F、H、I、J互为堂兄。
祖先结点:结点的祖先是从根到该结点所经分支上的所有结点; 如H的祖先为A、D。
子孙结点:以某结点为根的子树中的任一结点称为该结点的子孙;如A的子孙为B、C、D、E、F、G、H、I、J、K、L、M。;结点的度:结点子树的个数;
如D的度为3。
叶子结点:也叫终端结点,是
度为0的结点;如K、L、F、G
、M、I、J。
分支结点:度不为0的结点;如A、B、C、D
结点层次:根结点的层定义为1,根的孩子为第二层结点,依此类推。
树的高度:树中结点的最大层次;如图所示树的高度??4。
树的度: 树中各结点的度的最大值;如图所示树的度为3。
森林:m(m=0)棵互不相交的树的集合;;1. 双亲表示法:以一组连续的空间存储树的结点,通过保存每个结点的双亲结点的位置,表示树中结点之间的结构关系。其类型定义如下:
#define MAX_TREEE_SIZE 100
typedef struct PTNode{
ElemType data;
int parent; //双亲位置域
} PTNode;
typedef struct{
PTNode nodes[MAX_TREE_SIZE];
int n; //结点数
} Ptree; 特点:找双亲容易,找孩子难; 通过保存每个结点的孩子结点的位置,表示树中结点之间的结构关系。
多重链表:每个结点有多个指针域,分别指向其子树的根。
结点同构:结点的指针个数相等,为树的度d。
结点不同构:结点指针个数不等,为该结点的度d。; 孩子链表:其主体是一个与结点个数一样大小的一维数组,数组的每一个元素有两个域组成,一个域用来存放结点信息,另一个用来存放指针,该指针指向由该结点孩子组成的单链表的首位置。单链表的结构也由两个域组成,一个存放孩子结点在一维数组中的序号,另一个是指针域,指向下一个孩子。每个结点的孩子结点用单链表存储,再用含n个元素的结构数组指向每个孩子链表。;A;typedef struct CTNode { //孩子结点
int child;
struct CTNode *next;
} *ChildPtr;
typedef struct {
ElemType data;
ChildPtr firstchild; //孩子链表头指针
} CTBox;
typedef struct {
CTBox nodes[MAX_TREE_SIZE];
int n , r ; //结点数和根的位置
}CTree;; 用二叉链表作
文档评论(0)