6.1树的定义和存储
发布日期:2021-06-30 10:49:20 浏览次数:2 分类:技术文章

本文共 1140 字,大约阅读时间需要 3 分钟。

树(Tree)是n(n>=0)个结点的有限集。如下图中,A为根,图6.1(a)称为子树(SubTree)

结点度(Degree):如A的结点度为3,B的结点度为2,C的结点度为1。

结点度为0的结点叫叶子(Leaf):如K,L,M。

孩子(Child):如L是E的孩子,E是B的孩子。

双亲(Parent):A是B的双亲,B是E的双亲。

兄弟(Sibling):如BCD为兄弟。

层次(Level):根为第一层,然后第二层,第三层。

深度(Depth):上图深度为4。

森林(Forest):是m(m>=0)颗互不相交的树的集合。

树的存储结构是干什么的??

操作系统的文件管理,目录管理,网络系统中的域名管理,数据库系统里面的索引,编译器的语法书等等

因为内存是线性的,所以下面表示树只有三种表示法:

双亲、孩子、孩子兄弟表示法

下面给出双亲表示法:

typedef int ElemType;typedef struct PTNode{	ElemType data;	//结点数据	int parent;	//双亲位置}PTNode;typedef struct{	PTNode nodes[MAX_TREE_SIZE];	int r;	//根结点位置	int n;	//结点数目}PTree;
如下,这样的话,上图可以写成这样:

下标 数据 父母
0 A -1
1 B 0
2 E 1
3 K 2
4 L 2
5 F 1
6 C 0
7 G 6
8 D 0
9 H 8
10 M 9
11 I 8
12 J 6
大家先不要掌握这个是如何排序的,只要知道,这个父母表示法就是类似于这样的。

这个的缺点是,如果要知道某个孩子是什么,就要遍历整个树。

我们也可以把结构改变,增加两列,上面填写他们孩子的下标。

下面是孩子表示法:

下面直接表示,因为为了演示方便,在此就不排序了。以后说到再排序

孩子父亲表示法就是在这行加入父亲行号如下图:

下面是代码:

//双亲孩子表示法#define  MAX_TREE_SIZE 100typedef int ElemType;//孩子结点typedef struct CTNode{	int child;	//孩子结点的下标	struct CTNode *next;	//指向下一个孩子结点的指针}*ChildPtr;//表头结构typedef struct{	ElemType data;	int parent;	//下标表示	ChildPtr firstChild;}CTBox;//树结构typedef struct{	CTBox nodes[MAX_TREE_SIZE];	//结点数组	int r, n;	//根的位置,和结点数目

转载地址:https://it1995.blog.csdn.net/article/details/55098423 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:6.2二叉树及二叉树存储结构
下一篇:5.6m元多项式的表示

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月25日 01时27分04秒