PAT_甲级_1094 The Largest Generation

题目大意:

输入树结点的个数N,非叶结点个数M,然后输入M个非叶节点的孩子结点,求结点个数最多的那层,输出该层的结点个数和层号.

算法思路:

此题也是考察树的遍历,可以使用先序遍历或者层序遍历建立每一层和节点个数的关系,这里采用了层序遍历,直接在出队节点的时候就先更新当前层的节点个数,然后更新最多节点数目和层数。对应代码如下:

int largestGeneration = -1;// 最多节点数目
int largestGenerationOfLevel;// largestGeneration对应的层数

void levelTraverse(int root){
    int levelNum[105] = {};//每一层的节点数目,一定要初始化
    queue q;
    node[root].level = 1;// 第一层
    q.push(root);
    while (!q.empty()){
        int t = q.front();
        q.pop();
        ++levelNum[node[t].level];
        if(largestGeneration

提交结果:

image.png

AC代码:

#include 
#include 
#include 

using namespace std;

struct Node{
    vector child;
    int level;
}node[1000];

int largestGeneration = -1;// 最多节点数目
int largestGenerationOfLevel;// largestGeneration对应的层数

void levelTraverse(int root){
    int levelNum[105] = {};//每一层的节点数目,一定要初始化
    queue q;
    node[root].level = 1;// 第一层
    q.push(root);
    while (!q.empty()){
        int t = q.front();
        q.pop();
        ++levelNum[node[t].level];
        if(largestGeneration