树(森林)的定义和画图

 

目录

代码实现

“双亲表示法”顺序存储

“孩子表示法”链式存储

树的孩子表示法存储 v.s. 图的邻接表存储 v.s. 散列表的拉链法 v.s. 基数排序

“孩子兄弟表示法”链式存储

画图表示

“双亲表示法”

1.树

2.森林

“孩子表示法” 

1.树

2.森林

 “孩子兄弟表示法”

1.树

2.森林

​编辑


写代码:使用“双亲表示法”,定义顺序存储的树(以及森林) 
写代码:使用“孩子表示法”,定义链式存储的树(以及森林) 
对比:树的孩子表示法存储 v.s. 图的邻接表存储 v.s. 散列表的拉链法 v.s. 基数排序。你发现了什么? 
写代码:使用“孩子兄弟表示法”,定义链式存储的树(以及森林) 
自己动手创造,画一个结点总数不少于10的树,并画出对应的“双亲表示法、孩子表示法、孩子兄弟表示法”三种数据结构的示意图 
自己动手创造,画一个至少包含3棵树的森林,并画出对应的“双亲表示法、孩子表示法、孩子兄弟表示法”三种数据结构的示意图 

代码实现

“双亲表示法”顺序存储

#include <stdio.h>

#define MAX_TREE_SIZE 100//树中最多结点数
typedef int ElemType;
typedef struct //树的结点定义 
{
	ElemType data;//数据元素
	int parent;//双亲位置域
	 
}PTNode;
typedef struct
{
	PTNode nodes[MAX_TREE_SIZE];
	int n;
}PTree;
 

“孩子表示法”链式存储

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;

树的孩子表示法存储 v.s. 图的邻接表存储 v.s. 散列表的拉链法 v.s. 基数排序

存储方法内容相似之处差异之处
孩子表示法

专注于表示树结构中的父子关系。每个节点都有一个指向其孩子节点的链表。便于实现树的各种遍历和操作。

优点:找孩子结点方便

缺点:找双亲结点不方便,需要遍历整个数组

这四种数据结构或算法都涉及到了链表的使用,无论是表示节点关系还是解决冲突。
它们都是为了解决特定问题而设计的,具有各自的优点和适用场景。
孩子表示法和图的邻接表存储是用于表示节点关系的,而散列表的拉链法是用于解决散列冲突的,基数排序则是一种排序算法。
它们的适用场景不同,孩子表示法适用于树结构,图的邻接表适用于图结构,散列表的拉链法适用于散列表中的冲突解决,基数排序适用于整数排序。
它们的实现方式和复杂度也不同,例如基数排序的时间复杂度可以达到O(d*(n+r)),其中d是位数,n是待排序列中记录的个数,r是基数的范围,而孩子表示法和图的邻接表存储则主要关注于空间复杂度和节点关系的表示。
‌图的邻接表

用于表示图结构中的节点关系。
每个节点都有一个指向其相邻节点的链表。
适用于表示复杂的关系网络,如社交网络、交通网络等。

‌散列表的拉链法‌

用于解决散列冲突的一种方法。
当多个关键字散列到同一位置时,将它们链接成一个链表。
提高了散列表的查找效率,但增加了空间复杂度。

‌基数排序‌一种非比较型整数排序算法。
按照低位先排序,然后收集;再按照高位排序,然后再收集的方式进行。
适用于整数排序,特别是当整数范围较大时。

“孩子兄弟表示法”链式存储

#include <stdio.h>

typedef int ElemType;
typedef struct CSNode
{
	ElemType data;//数据域 
	struct CSNode *firstchild,*nextsibling;//第一个孩子和右兄弟指针
	 
}CSNode,*CSTree;

画图表示

“双亲表示法”

1.树

2.森林

 

“孩子表示法” 

1.树

2.森林

 

 “孩子兄弟表示法”

1.树

2.森林

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大晴的上分之旅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值