社区讨论

京师吼人

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 条回复,欢迎继续交流。

正在加载回复...