#include<iostream>
using namespace std;
struct node{
struct node*left1=NULL;
struct node*right1=NULL;
};
typedef struct node list;
void judge(node*a,int now,int*ans){
if(a->left1!=NULL){
now++;
*ans=max(now,*ans);
judge(a->left1,now,ans);
judge(a->right1,now,ans);
}
if(a->right1!=NULL){
if(a->left1!=NULL)now--;
now++;
*ans=max(now,*ans);
judge(a->left1,now,ans);
judge(a->right1,now,ans);
}
}
int main(){
int n;
cin>>n;
node a[n+1];
for(int i=1;i<=n;i++){
int p,q;
cin>>p>>q;
node*l=&a[p];
node*r=&a[q];
a[i].left1=l;
a[i].right1=r;
if(p==0)a[i].left1=NULL;
if(q==0)a[i].right1=NULL;
}
int ans=1;
judge(&a[1],1,&ans);
cout<<ans<<endl;
return 0;
}
求二叉树深度洛谷样例全过但测评全re?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- CSDN专家-深度学习进阶 2023-02-24 08:39关注
深度优先搜索即可,你写复杂了
#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> using namespace std; struct node{ int l,r; }a[1001000];//记录每个节点的左右节点 int Max=-1,n; void dfs(int root,int step){ if(root==0) return;//如果该节点为0(即上它的爸爸没有这个儿子),返回 Max=max(Max,step);//记录最大值 dfs(a[root].l,step+1);//搜索它的左儿子 dfs(a[root].r,step+1);//搜索它的右儿子 } int main(){ cin>>n;//输入n for(int i=1;i<=n;i++){ cin>>a[i].l>>a[i].r;//输入该节点的左节点和右节点 } dfs(1,1);//从1号节点,深度为1开始搜索 cout<<Max;//输出最大值 return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 在不同的执行界面调用同一个页面
- ¥20 基于51单片机的数字频率计
- ¥50 M3T长焦相机如何标定以及正射影像拼接问题
- ¥15 keepalived的虚拟VIP地址 ping -s 发包测试,只能通过1472字节以下的数据包(相关搜索:静态路由)
- ¥20 关于#stm32#的问题:STM32串口发送问题,偶校验(even),发送5A 41 FB 20.烧录程序后发现串口助手读到的是5A 41 7B A0
- ¥15 C++map释放不掉
- ¥15 Mabatis查询数据
- ¥15 想知道lingo目标函数中求和公式上标是变量情况如何求解
- ¥15 关于E22-400T22S的LORA模块的通信问题
- ¥15 求用二阶有源低通滤波将3khz方波转为正弦波的电路