当前位置: 首页 > news >正文

树(比赛用)

关于树

树,在二叉树中已经介绍过来,这里就不过多介绍了

有序树和无序树

• 有序树:结点的⼦树按照从左往右的顺序排列,不能更改。
• ⽆序树:结点的⼦树之间没有顺序,随意更改。

比如下面的这两颗树

从有序树的观点来看的话,B,C,D是有顺序的,顺序不一样,则这两颗树虽然孩子都是一样的,但是就属于不同的树

从无序树的观点来看,这两颗树只要根节点相同,管你顺序一不一样,都算作同一课树

在算法竞赛中,遇到的树基本上都是无序树

有根树和无根树

• 有根树:树的根节点已知,是固定的。
• ⽆根树:树的根节点未知,谁都可以是根结点。

在上面的两颗树当中,用有根树的观点来看的话,由于根是固定的,所以两颗树是不一样得,但是从无根树观点来看得话,因为谁都可以做根,所以这时候两颗树算是相同的树

在算法竞赛中,我们遇到的树一般都是无根树

树的孩子表示法

对于上面的孩子表示发起,只是关心孩子是谁,而不关心父亲是谁,但是这种表示方法,对于无根树来说,就不正确了,那我们如何来表示嘞?其实答案很简单,就把这个节点相连的节点全部表示出来

算法比赛中是如何给出树的结构的

虽然上面的图片告诉了1是根节点,但是对于2,5.......的节点,也不知到谁是根节点,谁不是根节点

用vector顺序表来是实现树的存储

 

在上面的图片中,我们创建一个vector数组,其中vector[i]就表示i号节点所链接的节点,在上面的上面的图片中,我们已经给出了比赛中给出的树的形式,所以用vector来实现的代码如下

#include<iostream>
#include<vector>
using namespace std;

const int N=1e5+10;
vector<int> edge[N];
 
int main()
{
	int n;
	cin>>n;          //输入节点的个数	
	while(n--)
	{
		int x,y;
		cin>>x>>y;
		edge[x].push_back(y);
		edge[y].push_back(x); 
	}	
	return 0;
}

链式前向星

所谓链式前向星就是用链表的方式来实现树的存储

代码实现

#include <iostream>

using namespace std;

// 链式前向星
int h[N], e[N * 2], ne[N * 2], id;
int n;
// 其实就是把 b 头插到 a 所在的链表后
void add(int a, int b)
{
	id++;
	e[id] = b;
	ne[id] = h[a];
	h[a] = id;
}
int main()
{
	cin >> n;
	for(int i = 1; i < n; i++)
	{
		int a, b; cin >> a >> b;
		// a 和 b 之间有?条边
		add(a, b); add(b, a);
	}
	return 0;
} 

 这里e和ne数组里面的长度为什么是2*n嘞,因为就是如果有节点3-->4,你先要头插4,又有4-->3,你又要头插4。

相关文章:

  • LeetCode 2502.设计内存分配器:暴力模拟
  • 【新算法】基于Transformer-LSTM-Adaboost的多输入单输出回归预测模型【MATLAB】
  • 解决Value of type ‘AVCodecContext‘ has no member ‘channels‘ 的问题
  • Mac编译ffmpeg源码并集成到iOS App
  • QT C++ QtConcurrent::run 异步任务 简单例子
  • 显式指定 ChromeDriver 路径
  • 归并排序:分而治之的排序之道
  • 关于JavaWeb中的组件-------Servlet
  • 企业业务安全进阶之路:AI技术与数据分析的应用
  • 解析Excel表表头
  • 淘宝/天猫获得淘宝商品快递费用 API 返回值说明
  • 2.25作业
  • 滑动验证组件-微信小程序
  • level2Day5
  • Postgresql-重置统计信息(reset statistics)
  • 二分查找理解
  • 数据挖掘中特征发现与特征提取的数学原理
  • 30 分钟从零开始入门 CSS
  • 【考研】复试相关上机题目
  • 【心得】缓存穿透与缓存击穿总是记混,一文从英语单词含义角度分析带你区分清楚!
  • 网站建设cms系统/推广平台下载
  • 网页链接的视频怎么下载/建站seo推广
  • it运维管理平台软件/正版seo搜索引擎
  • 织梦免费企业网站/青岛官网seo方法
  • 定制手机壳的网站/软文推广收费
  • dw做网站怎么替换字体/电脑培训机构哪个好