洛谷P4913【深基16.例3】二叉树深度题解

很简单的二叉树遍历问题,可以用dfs(深度优先搜索)解决。

看到数据范围,最大不超过 \(10^6\) ,可以不开 long long (但我还是习惯性地开了)

接下来上代码:

#include<bits/stdc++.h>
#define LL long long //宏定义
using namespace std;
const int N=1e6+5;
vector<LL>tree[N];//其实可以开两个数组L[i]和R[i]来表示节点i的左右子节点,但是我懒得改了awa
LL Max=-1;//打擂台求深度用
void dfs(LL u,LL f/*没用*/,LL dep/*计算深度*/){
	Max=max(Max,dep);//打擂台,遍历完后Max就是二叉树的深度
	for(LL v:tree[u]){//上个题遗留下来的,实际上可以直接遍历第0项和第1项的
		if(v==f||v==u||u==f)continue;//一个没什么用的去重,做其他题的时候写的,这道题用不到
		dfs(v,u,dep+1);
	}
}
int main(){
	LL n;
	cin>>n;
	for(LL i=1;i<=n;i++){
		LL v1,v2;
		cin>>v1>>v2;//传入节点
		tree[i].push_back(v1);//祖传代码
		tree[i].push_back(v2);
	}
	dfs(1,0,0);
	cout<<Max;//输出结果
	return 0;
} 

\(\tiny 附\)\(\tiny 原题链接\)

posted @ 2024-10-20 13:49  chengliye  阅读(11)  评论(0编辑  收藏  举报

My\large My GitHub\large GitHub