北邮oj二叉树的层数
我的方法比较的原始
#include<bits/stdc++.h>
using namespace std;
#define maxn 105
struct node{
int depth;//深度
bool flag;//是否在树中
void init(){//初始化
depth = 1;
flag = false;
}
};
node tree[maxn];
int main(){
int T,N,M,father,son;
scanf("%d",&T);
for(int k=1;k<=T;k++){
for(int i=0;i<maxn;i++){//初始化
tree[i].init();
}
scanf("%d %d",&N,&M);//M个节点
int maxdep = 1;//树的深度
while(N--){
scanf("%d %d",&son,&father);
tree[son].depth = tree[father].depth+1;//儿子节点比父亲节点深度加1
maxdep++;//书的深度随之增加
tree[son].flag = tree[father].flag = true;// /儿子节点和父亲节点都纳入树中
}
printf("Q%d:\n",k);
for(int i=1;i<=maxdep;i++){ //每一层遍历
int cnt = 0; //决定空格的输出
for(int j=1;j<=maxn;j++){//每一个节点遍历
if(tree[j].flag==false) continue;//未纳入树中,continue
if(tree[j].depth==i){
if(cnt==0){
printf("%d",j);
cnt++;
}
else{
printf(" %d",j);
}
}
}
printf("\n");
}
}
return 0;
}