#include<stdio.h>
#include<malloc.h>
typedef struct Node
{
char data;
struct Node *Lchild;
struct Node *Rchild;
}BiTNode,*BiTree;
typedef struct Node1{
BiTNode *element[5];
int front;
int rear;
}SeqQueue;
int IsEmpty(SeqQueue Q){
if(Q.front==Q.rear) return 1;
else return 0;
}
void InitQueue(SeqQueue *Q){
Q->front=Q->rear=0;
}
int EnterQueue(SeqQueue *Q,BiTNode *x){
if((Q->rear+1)%5==Q->front) return 0;
Q->element[Q->rear]=x;
Q->rear=(Q->rear+1)%5;
return 1;
}
int DeleteQueue(SeqQueue *Q,BiTNode *x){
if(Q->front==Q->rear) return 0;
x=Q->element[Q->front];
Q->front=(Q->front+1)%5;
return 1;
}
void CreateBiTree(BiTree *bt){
char ch;
ch=getchar();
if(ch=='.') *bt=NULL;
else{
*bt=(BiTree)malloc(sizeof(BiTNode));
(*bt)->data=ch;
CreateBiTree(&((*bt)->Lchild ));
CreateBiTree(&((*bt)->Rchild));
}
}
int LayerOrder(BiTNode *bt){
SeqQueue Q1;
BiTNode *p=bt;
InitQueue(&Q1);
if(bt==NULL) return 0;
EnterQueue(&Q1,p);
while(!IsEmpty(Q1)){
p=Q1.element[Q1.front];
DeleteQueue(&Q1,p);
printf("%c",p->data);
if(p->Lchild) {EnterQueue(&Q1,p->Lchild);}
if(p->Rchild) {EnterQueue(&Q1,p->Rchild);}
}
return 1;
}
void main(){
BiTree L;
L=(BiTNode*)malloc(sizeof(BiTNode));
printf("请输入二叉链表\n");
CreateBiTree(&L);
printf("请输出打印后的二叉树\n");
LayerOrder(L);
}