代码如下:
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
#define N 100
struct Node{
   struct Node *lchild;
   struct Node *rchild;
   char c;
}Tree[N];
vector<char> m[N];
int loc=0;
struct E{
   char a;//记录一个结点的左孩子信息
   char b;//记录一个结点的右孩子信息
}E[N];

Node *create(){//静态分配一个结点
    Tree[loc].lchild=Tree[loc].rchild=NULL;
	return &Tree[loc++];
}

Node *setTree(char k,char l,char m){//按行输入递归的创建一棵树
	Node *T=create();
	if(k=='0')return NULL;//如果该字符是空,则返回空
	 else{
	 T->c=k;
	 if(l>='A'&&l<='Z')T->lchild=setTree(l,E[l-'0'].a,E[l-'0'].b);
	 if(m>='A'&&m<='Z')T->rchild=setTree(m,E[m-'0'].a,E[m-'0'].b);
	 }
	 return T;
}

FILE *fp1,*fp2;
/*void preOrder(Node *T){
if(T)printf("%c ",T->c);
if(T->lchild)preOrder(T->lchild);
if(T->rchild)preOrder(T->rchild);
}*/
//树建立的没问题经过检查

void levelOrder(Node *T,int level){//层序输出
	if(level%2==1){
	if(T)m[level].push_back(T->c);
	}
	if(T->lchild)levelOrder(T->lchild,level+1);
	if(T->rchild)levelOrder(T->rchild,level+1);
}


int main(){
fp1=fopen("4.in","r");
fp2=fopen("4.out","w");
char s[N];
fgets(s,99,fp1);//先获取第一行数据,方便下面的函数进行传递
int len=strlen(s);
if(len==1)strcat(s,"0000");//进行标准格式化
if(len==3)strcat(s,"00");
E[s[0]-'0'].a=s[2];
E[s[0]-'0'].b=s[4];
char s1[N];
while(fgets(s1,99,fp1)!=NULL){
    int len=strlen(s1);
	if(len==1)strcat(s1,"0000");//进行标准格式化
    if(len==3)strcat(s1,"00");
    E[s1[0]-'0'].a=s1[2];
	E[s1[0]-'0'].b=s1[4];
}
Node *T=setTree(s[0],s[2],s[4]);
levelOrder(T,1);
//preOrder(T);
for(int i=1;i<N;i++){
    if(m[i].size()>0){
		if(m[i].size()==1){
	   fprintf(fp2,"第%d层的结点是:",i);
	   fprintf(fp2,"%c",m[i][0]);
	   fprintf(fp2,"\n");
		}
		else{
	       fprintf(fp2,"第%d层的结点是:",i);
	       fprintf(fp2,"%c",m[i][0]);
		   for(int j=1;j<m[i].size();j++){
		   fprintf(fp2,",%c",m[i][j]);
		   }
		}
	}
}
return 0;
}