#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MaxSize 101
typedef struct LTree
{
char data;
struct LTree *lchild,*rchild;
}LTree,*BiTree;
typedef struct LQueue
{
BiTree Queue[MaxSize];
int front,rear;
}LQueue;
void CreateBiTree(BiTree *T);
void InitQueue(LQueue *Q);
bool JudgeEmpty(LQueue *Q);
void EnQueue(LQueue *Q,BiTree T);
BiTree DeQueue(LQueue *Q);
void LevelOrderTraverse(BiTree T);
/*创建树*/
void CreateBiTree(BiTree *T)
{
char ch;
scanf("%c",&ch);
if(ch == '#')
{
*T = NULL;
return;
}
else
{
*T = (BiTree)malloc(sizeof(LTree));
(*T)->data = ch;
CreateBiTree(&(*T)->lchild);
CreateBiTree(&(*T)->rchild);
}
}
/*初始化队列*/
void InitQueue(LQueue *Q)
{
Q->front = Q->rear = 0;
}
/*判断队列是否为空*/
bool JudgeEmpty(LQueue *Q)
{
if(Q->front == Q->rear)return true;
else return false;
}
/*进队*/
void EnQueue(LQueue *Q,BiTree T)
{
Q->Queue[Q->rear++] = T;
}
/*出队*/
BiTree DeQueue(LQueue *Q)
{
return Q->Queue[Q->front++];
}
/*水平遍历*/
void LevelOrderTraverse(BiTree T)
{
LQueue Q;
InitQueue(&Q);
BiTree p;
EnQueue(&Q,T);
while (!JudgeEmpty(&Q))
{
p = DeQueue(&Q);
printf("%c ",p->data);
if(p->lchild != NULL)EnQueue(&Q,p->lchild);
if(p->rchild != NULL)EnQueue(&Q,p->rchild);
}
}
int main(int argc, char const *argv[]) {
BiTree T;
CreateBiTree(&T);
LevelOrderTraverse(T);
return 0;
}