3.每行输入树的父节点和左右孩子节点
输出树的层次遍历的奇数层的所有结点(根为第1层)。
原 样例输入和样例输出
从 input_3.txt 输入
输入格式:
A B C
B E
C F G
输出到 output_3.txt:
输出格式:
第 1 层结点:A
第 3 层结点:E,F,G
样例输入输出2
从 input_3.txt 输入
输入格式:
A B C
B D E
D H
E I J
I K
C F G
输出到 output_3.txt:
输出格式:
第1层节点:A
第3层节点:D,E,F,G
第5层节点:K
设计思路:利用简单的字符自动机,处理节点间关系,直接对节点的层序遍历层数进行赋值,然后遍历输出
代码:
#include<cstdio>
int main()
{
FILE *fp = fopen("input3.txt","r+");
int m[128] = {0};
char ch;
int k = 1;
int n = 1;
fscanf(fp,"%c",&ch);
m[ch] = k;
k++;
int hs[27] = {0};
while(1)
{
int g = fscanf(fp,"%c",&ch);
if(g == EOF)
{
break;
}
if(ch == ' ') {continue;}
if(ch == '\n')
{
fscanf(fp,"%c",&ch);
k = m[ch] + 1 ;
if(k > n) n = k + 1;
continue;
}
if(m[ch] == 0)
{
m[ch] = k;
}
}
for(char j = 'A';j <= 'Z';j++)
{
hs[m[j]]++;
}
fp = fopen("ouput4.txt","a");
for(int i = 1;i <= n;i += 2)
{
fprintf(fp,"第%d层节点:",i);
for(char j = 'A';j <= 'Z';j++)
{
if(m[j] == i)
{
--hs[i];
fprintf(fp,"%c",j);
if(hs[i] != 0) fprintf(fp,",");
}
}
if(i != n-1 &&i != n ) fprintf(fp,"\n");
}
return 0;
}
附记:本程序还适用于处理树,森林的层序遍历,无向图的广度优先搜索。