北邮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; 
} 

猜你喜欢

转载自blog.csdn.net/weixin_37762592/article/details/88570367