二叉树的层数

题目描述:

老师有一个问题想考考mabo,但是mabo不会, 所以想清你来帮帮忙。 问题如下:
给一个二叉树请把这个棵二叉树按层来打印。如果为相同层,需要从左到右打印。一个节点是先添加左节点后添加右节点,即添加顺序与输入顺序一致。

输入格式:

首先输入一个整数T,表示-共有T组数据0

输出格式:

对于每组先输出一行"Qi:"表示第1个问题,然后接下来输出每个问题二叉树每层的节点,在同一层的节点用空格分开,同一层输出在一行(每一行末尾没有空格) ,不同的层输出在不同行(下面Sample Ouput所示)

输入样例:

2 

4 5 

2 1 

3 1

4 2

5 4

1 2

2 1

输出样例:

Q1: 

1 

2 3 

4

5

Q2: 

1

2

通过学习此大佬的思想自己编了代码如下:

#include
#include
#include
#include

using namespace std;

const int MAXM=101;

int level[MAXM];
vector arr[MAXM];            //arr[层数]=push_back(节点编号);

int main(){
    int T;
    while(scanf("%d",&T)!=EOF){
    	int k=0;                     //记录第几组数据 
    	while(T--){
    		k++; 
    		int n,m;                 //n行输入  这棵树有m个节点
    		scanf("%d%d",&n,&m);
    		memset(level,0,sizeof(level));
    		memset(arr,0,sizeof(arr));
    		level[1]=1;              //编号为1的节点是根节点 层数是1 
    		arr[1].push_back(1);
    		int max_level=1;         //记录本树最大层数 
			while(n--){
				int a,b;
				scanf("%d%d",&a,&b);
				level[a]=level[b]+1;
				arr[level[a]].push_back(a);
				max_level=max_level>level[a]?max_level:level[a];
			}
			cout<<"Q"<

学习借鉴的链接:

https://blog.csdn.net/chaokudeztt/article/details/104753459

你可能感兴趣的:(二叉树的层数)