0
点赞
收藏
分享

微信扫一扫

多叉树的建树与遍历

PTA PAT甲级 1004 Counting Leaves

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
const int N=1e3;
int s[N];
int n,m;
int maxf;
struct Node
{
    //该节点的所有子节点的idx编号存入vecotr
    vector<int>son;
}nodes[N];
void dfs(int floor,int id)
{
    if(!nodes[id].son.size())
    {
        s[floor]++;
        maxf=max(maxf,floor);
        return;
    }
    //搜索它的每一个子节点
    for(auto it:nodes[id].son)dfs(floor+1,it);
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int u;cin>>u;
        int k;cin>>k;
        while(k--)
        {
            int v;cin>>v;
            //记录u有一个子节点v
            nodes[u].son.push_back(v);
        }
    }
    dfs(1,1);
    for(int i=1;i<=maxf;i++)
    {
        cout<<s[i];
        if(i!=maxf)cout<<' ';
    }
    return 0;
}
举报

相关推荐

0 条评论