题目内容
题目见连接:https://www.patest.cn/contests/pat-a-practise/1004
解析内容
1.建立树,注意哦,是多叉树,因为孩子节点不确定有几个,因此选择vector非常好。
2.层次遍历,注意在层次遍历的时候,当节点的孩子vector的size等于0时,进行计数。
3.用vector存储每一层的叶子节点数,便于输出。
代码内容
#include <iostream>
#include <vector>
#include <queue>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
//构建树节点
struct Node{
int value;
vector<int> child;//多叉树,用vector
};
const int NUM = 100+5;
Node tree[NUM];
int main(int argc, char *argv[]) {
int N,M;
cin>>N>>M;
for(int i=0;i<M;i++){
int id,k;
cin>>id>>k;
tree[id].value = id;//比较重要
for(int j=0;j<k;j++){
int t;
cin>>t;
tree[id].child.push_back(t);
}
}
vector<int> v;//存储最终结果
queue<int> q;//进行层次遍历比较好
int level = 0;
q.push(1);//题目中说了默认根节点为01
while(!q.empty()){
int size = q.size();//该层的全部节点数
int count = 0;
for(int i=0;i<size;i++){
int top = q.front();
q.pop();
if(tree[top].child.size()==0){//叶子节点,计数
count++;
}
for(int j=0;j<tree[top].child.size();j++){
q.push(tree[top].child[j]);
}
}
v.push_back(count);//结果push 进去
}
//注意输出没有空格
cout<<v[0];
for(int i=1;i<v.size();i++){
cout<<" "<<v[i];
}
return 0;
}