树的静态写法

本文探讨树结构与二叉树的区别,重点介绍树的子结点数量无限制的特点及其静态实现方式,包括使用数组和vector的优缺点。通过对比,阐述在不同情况下选择合适的数据结构的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

此处的树,子结点的个数没有限制且子结点没有先后次序的树

树与二叉树的不同之处就在于树的子结点数可能会有很多,如果利用动态写法,利用链表的指针来指示的话会比较麻烦,利用静态写法,也就是用数组下标来代替所谓的地址,当然这需要事先开一个大小不低于结点上限个数的结点数组,因此结构体node的定义如下:

struct node{
	typename data;//数据域
	int child[maxn];//指针域,存放所有子结点的下标 
}Node[maxn];//结点数组,maxn为结点上限个数 

 在上面的定义中,由于无法预知子结点的个数,因此child数组的长度只能开到最大,而这对一些结点个数比较多的题目来说显然是不可能的,开辟的空间过多会超过限制。因此需要使用vector,结构体的定义如下:

struct node{
	typename data;//数据域
	vector child;//指针域,存放所有子结点的下标 
}Node[maxn];//结点数组,maxn为结点上限个数 

与二叉树的静态实现相似,当需要新建一个结点时,就按顺序从数组中取出一个下标即可

int index=0;
int newNode(int v){
	Node[index].data=v;//数据域为v
	Node[index].child.clear();//清空子结点
	return index++;//返回结点下标,并令index自增
} 

若是题目中给出结点的编号为从0-n-1连续或从1-n连续,则不需要newNode函数,题目中的编号就可以直接作为Node数组的下标。

如果题目中不涉及数据域的情况,只需要树的结构,则上述的结构体可以直接转换为vector数组,即vector<int>child[maxn],,每个vector都存放了各结点的所有子结点 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值