#include
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<
深度优先搜索即可,你写复杂了
#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;
}
输出是一行,不用换行。
cout<<ans;
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!