3.8总结

T1 P4913 【深基16.例3】二叉树深度

首先看输入,采用左右孩子表示法,定义数组tree,类型是结构体,有两个子变量lt,rt记录左右孩子
实际上在存贮的时候依然可以使用vector,将每个点与他的父亲连边
然后定义一个dep数组表示一个节点的深度,每个点的深度实际上就是他父亲的深度+1,而根节点深度已经确定为1,所以只要dfs遍历一遍求出dep,取最大值即可

dfs代码:

点击查看代码
void dfs(int x,int ff){
	dep[x]=dep[ff]+1;
	for(int v:vt[x]){
		if(v!=ff){
			dfs(v,x);
		}
	}
}

T2 B3861 子树和

定义sz表示以i为根节点的子树内节点数量
每个点的子树和就是每个点子节点的子树和
dfs跑一遍,逐个输出即可
Tips:自己也算自己的子树和中一个

dfs代码:

点击查看代码
void dfs(int x,int ff){
	sz[x]=1;
	for(int v:vt[x]){
		if(v!=ff){
			dfs(v,x);
			sz[x]+=sz[v];
		}
	}
}
posted @ 2025-03-12 20:56  KK_SpongeBob  阅读(23)  评论(0)    收藏  举报