天梯赛——小字辈(树的遍历 BFS vector)

题目链接:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>
#include<set>
using namespace std;
#define maxn 100010
vector<int> child[maxn];
int len=0;
int ans[100010];
int maxdepth=0;
void DFS(int index,int depth)
{
    if(depth>maxdepth&&child[index].size()==0)
    {
        len=0;
        ans[len++]=index;
        maxdepth=depth;
        return;
    }
    if(depth==maxdepth&&child[index].size()==0)
    {
        //len++;
        ans[len++]=index;
        return;
    }
    for(int i=0;i<child[index].size();i++)
    {
        DFS(child[index][i],depth+1);
    }
    //return maxdepth;
}
int main()
{
    int n;
    scanf("%d",&n);
    int father;
    int root;
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&father);
        if(father!=-1)
        {
        child[father].push_back(i);
        }
        else
        root=i;
    }
    DFS(root,1);
    printf("%d\n",maxdepth);
    printf("%d",ans[0]);
   // printf("len=%d\n",len);
    for(int i=1;i<len;i++)
    {
        printf(" %d",ans[i]);
    }
    return 0;
}

一开始不敢写

还有能输出层次

不知道怎么输出对应下标

其实定义一个数组即可

一开始还想定义一个结构体

判断的时候分开来判断

数组长度也可以重新计数

最后输出格式也遇到了问题

直接空格+数字就不会有多余的空格了

猜你喜欢

转载自blog.csdn.net/qq_42232118/article/details/82219826
今日推荐