社区讨论
京师吼人
P4913【深基16.例3】二叉树深度参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mhjczzzk
- 此快照首次捕获于
- 2025/11/04 00:33 4 个月前
- 此快照最后确认于
- 2025/11/04 00:33 4 个月前
首先,不要用for!用BFS递归!
看 错了22遍 的代码:
CPP#include<bits/stdc++.h>
using namespace std;
#define int long long
#define N 1000010
struct node{
int deep,dad,l,r;
}tree[N];
int n;
signed main(){
std::ios::sync_with_stdio(false);
cout.tie(NULL);
cin.tie(NULL);
int n,x,y,m=-0x3f;cin>>n;
tree[1].deep=0;
for(int i=1;i<=N;i++){
tree[i].deep=0;
}
for(int i=1;i<=n;i++){
cin>>x>>y;
int s=tree[i].deep;
tree[i].l=x;
tree[i].r=y;
if(x!=0)tree[x].dad=i;
if(y!=0)tree[y].dad=i;
if(x!=0)tree[x].deep=s+1;
if(y!=0)tree[y].deep=s+1;
m=max(m,s+1);
}
if(n<=1)cout<<"0 0";
else cout<<m;
}
看一组样例
输入: 7 4 5 6 7 0 0 0 0 3 2 0 0 0 0 输出: 4
你会发现上述代码构造二叉树时没有及时刷新节点(连接两棵树时更深的那棵树的节点的深度没有更新)
因此用bfs而不是for循环。
回复
共 0 条回复,欢迎继续交流。
正在加载回复...