北邮OJ 二叉树的层数
#include<bits/stdc++.h>
using namespace std;
typedef struct node{
int lchild,rchild,deep;
}Node;
int max(int x,int y){
return (x>y)?x:y;
}
int main(){
int t,i=1;
Node node[101];
scanf("%d",&t);
while(t--){
int N,M;
scanf("%d%d",&N,&M);
for(int j=1;j<=M;j++){
node[j].deep=0;
node[j].lchild=-1;
node[j].rchild=-1;
}
int a,b,Max=0;
node[1].deep=1;
for(int j=1;j<=N;j++){
scanf("%d%d",&a,&b);
if(node[j].lchild==-1)
node[j].lchild=a;
else
node[j].rchild=a;
node[a].deep=node[b].deep+1;
if(node[a].deep>Max)Max=node[a].deep;
}
printf("Q%d:\n",i);
i++;
int flag;
for(int k=1;k<=Max;k++){
flag=0;
for(int j=1;j<=M;j++){
if(flag&&node[j].deep==k)
printf(" ");
if(node[j].deep==k){
printf("%d",j);
flag=1;
}
}
printf("\n");
}
}
}