//每当输入完right节点数据之后需要再输入一个0
//当left mid节点都有数据但right节点没有数据时不需要多输入那个0 不然第一个测试点报错
#include<bits/stdc++.h>
using namespace std;
struct node{
int data;
node* left;//左孩子
node* mid;//中孩子
node* right;//右孩子
};
typedef node* T;
T inserrt(){
int x;
cin>>x;
T t=(T)malloc(sizeof(struct node));
if(!x){//当输入节点数据为0时直接返回NULL
return NULL;
}
t->data=x;//如果不为0就把数据储存进data
t->left=inserrt();//递归左孩子
if(!t->left){//当左孩子为0就代表中孩子右孩子都为0,直接return跳过中后孩子赋值
t->mid=NULL;
t->right=NULL;
return t;
}
t->mid=inserrt();//递归中孩子
if(!t->mid){//如果中孩子为0就代表右孩子为0,直接return跳过后孩子赋值
t->right=NULL;
return t;
}
t->right=inserrt();//递归右孩子
if(t->right)//如果右孩子是0就不需要多输入0,如果不是就多输入一个0(多输入0是根据题目输入要求)
cin>>x;
return t;
}
void fun1(T t){//实际是个bfs
if(!t) return ;
T a[100];//用数组模拟队列
T p;//用来遍历队列
int rear=0;//头指针
int front=0;//尾指针
a[rear++]=t;//入队
while(rear!=front){//当队列不为空
p=a[front++];
cout<<p->data<<" ";
//让三个孩子入队
if(p->left){
a[rear++]=p->left;
}
if(p->mid){
a[rear++]=p->mid;
}
if(p->right){
a[rear++]=p->right;
}
}
}
int main(){
T t;
int i=0;
int p;
t=inserrt();
fun1(t);
}