洛谷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 原题链接\)