PTA List Leaves
基本建树加队列的广度优先搜索
层序遍历
在这里插入代码片
```#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//using namespace std;
#define MAXSIZE 1000010
int queue[20];//建队列
int first=0;//队列头子
int last=0;
int m;
int flag=0;//输出的时候判断是否输出空格
struct node
{
int l;
int r;
} node[MAXSIZE];
void push(int x){
queue[last]=x;
last++;
return;
}
void pop(){
first++;
return ;
}
int List[MAXSIZE];
int main()
{
int n;
char c;
scanf("%d%c",&n);
char s[10];
int a[20],i;
memset(a,-1,sizeof(a));
for( i=0;i<n;i++){
gets(s);
//printf("%d\n",s[0]);
if(s[0]>='0' && s[0]<='9'){
node[i].l=s[0]-48;
a[s[0]-48]=i;
}
else node[i].l=-1;
if(s[2]>='0' && s[2]<='9'){
node[i].r=s[2]-48;
a[s[2]-48]=i;
}
else node[i].r=-1;
}
if(n==1){
printf("0");
}
else{
for( i=0;i<n;i++){
if(a[i]==-1)break;
}
m=i;
//printf("%d\n",m);
//if()
// printf("%d\n",node[m].l);
push(m);
for(i=0;i<n;){
if(node[m].l!=-1){
push(node[m].l);
}
if(node[m].r!=-1){
push(node[m].r);
}
if(node[m].l!=-1 || node[m].r!=-1){
pop();
m=queue[first];
i++;
}
else {
// int flag=0;
if(flag){
printf(" %d",m);
pop();
m=queue[first];
i++;
}
else{
printf("%d",m);
pop();
m=queue[first];
i++;
flag=1;
}
}
}
}
return 0;
}