PAT 1004 求各层次叶子节点的数量

来源:互联网 发布:淘宝托管公司收费 编辑:程序博客网 时间:2024/06/08 23:44

题意:给一个树,求各层次的叶子节点数量

思路: 直接通过叶子节点向上遍历,数出他是第几层,然后对应层的叶子数量加1.注意要去一下最大层的层数。

还有就是只有1个根节点的话,不视作叶子节点。


#include<cstdio>#include<algorithm>#include<cstring>#include<iostream>#include<stack>#include<vector>#include<queue>#include<string>#include<map>using namespace std;#define INF 99999999#define M 200//start:22:03//end:22:22int main(){int n,m,i,j,id,childn,child;int nonleaf[M],father[M];memset(nonleaf,0,sizeof(nonleaf));scanf("%d%d",&n,&m);if(n==1){printf("1\n");}for(i=0;i<m;i++){scanf("%d%d",&id,&childn);nonleaf[id]=1;for(j=0;j<childn;j++){scanf("%d",&child);father[child]=id;}}int level,p;int ans[M];for(i=0;i<=n;i++){ans[i]=0;}int levelmax=0;for(i=1;i<=n;i++){if(nonleaf[i]==0){p=i;level=0;while(p!=1){p=father[p];level++;}ans[level]++;if(level>levelmax){levelmax=level;}}}for(i=0;i<=levelmax;i++){if(i!=levelmax)printf("%d ",ans[i]);else printf("%d\n",ans[i]);}}



阅读全文
0 0