求二叉树深度洛谷样例全过但测评全re?

img

#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<

深度优先搜索即可,你写复杂了

img

#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;
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632