题目描述:
输出树的层次遍历的奇数层的所有结点。
从input_3.txt 输入
输入格式:
A B C//非叶子结点与其孩子
B E
C F G
输出格式:
第1 层结点:A
第3 层结点:E,F,G
知识点
使用scanf记录一行字符串,以空格获得换行符为结束标记,当吸收一行字符后,要用getchar()吸收换行符‘\n’
gets()记录一行字符串之后,不需要getchar()吸收换行符‘\n’;
AC代码
#include <stdio.h>
#include <queue>
#include <vector>
#define maxn 26
using namespace std;
vector<int>T[maxn];
int level[26]={0};
void LevelOrder(int root)
{
queue<int>q;
vector<int>odd;
q.push(root);
level[root]=1;//
int k=1;
while(!q.empty())
{
int temp=q.front();
q.pop();
if(level[temp]%2==1)
{
odd.push_back(temp);
}
else if(level[temp]==2*k)
{
printf("第%d层的结点有:",2*k-1);
for(int i=0;i<(int)odd.size();i++)
{
printf("%c",odd[i]+'A');
if(i<(int)odd.size()-1)printf(",");
else printf("\n");
}
k++;
odd.clear();
}
for(int i=0;i<(int)T[temp].size();i++)
{
int child=T[temp][i];
q.push(child);
level[child]=level[temp]+1;
}
}
//如果只有奇数层,那么要加上下面这段代码,否则会少输出一层!
if(odd.size()!=0)
{
printf("第%d层的结点有:",2*k-1);
for(int i=0;i<(int)odd.size();i++)
{
printf("%c",odd[i]+'A');
if(i<(int)odd.size()-1)printf(",");
else printf("\n");
}
odd.clear();
k++;
}
}
int main()
{
freopen("input.txt","r",stdin);
char c;
while(1)
{
int flag=0,a,b;
while(c=getchar(),c!='\n'&&c!=EOF)
{
if(flag==0&&c>='A'&&c<='Z')
{
a=c-'A';
flag=1;
}
else if(flag==1&&c>='A'&&c<='Z')
{
b=c-'A';
T[a].push_back(b);
}
}
if(c==EOF)break;
}
LevelOrder(0);
}
**
5月1日代码
**
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <vector>
#include <time.h>
#include <queue>
#include <ctype.h>
using namespace std;
typedef struct Node
{
int data,level;
vector<int>child;
}Node;
Node Tree[200];
vector<int>level[100];
void levelorder(int root)
{
queue<int>q;
q.push(root);
Tree[root].level=1;
while(!q.empty())
{
int temp=q.front();
int x=Tree[temp].level;
level[x].push_back(temp);//
q.pop();
for(int i=0;i<Tree[temp].child.size();i++)
{
int u=Tree[temp].child[i];
Tree[u].level=Tree[temp].level+1;
q.push(u);
}
}
}
void to_print()
{
for(int i=1;i<=100;i+=2)
{
if(level[i].size()==0)break;
printf("第%d层结点:",i);
for(int j=0;j<level[i].size();j++)
{
printf("%c",level[i][j]);
if(j<level[i].size()-1)printf(",");
else printf("\n");
}
}
}
int main()
{
freopen("input.txt","r",stdin);
int mark=0;
char root;
while(1)
{
int flag=0;
char c,sub_root;
while(1)
{
c=getchar();// 需要
if(isalpha(c)&&flag==0)
{
if(mark==0)
{
root=c;
mark=1;
}
sub_root=c;
flag=1;
}
else if(isalpha(c))
{
Tree[sub_root].child.push_back(c);
}
else if(c=='\n'||c==EOF)break;
}
if(c==EOF)break;
}
levelorder(root);
to_print();
}