#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 10
typedef struct node{
char data;
struct node* lchild;
struct node* rchild;
}BTNode;
typedef struct {
BTNode* data[MaxSize];//为了使我们的队列能够对树节点进行存储,输出,定义了一个数组指针
int front, rear;
}SqQueue;
BTNode* Create()
{
BTNode* root=NULL;
char data;
scanf("%c", &data);
if(data != '#')
{
root = (BTNode*)malloc(sizeof(BTNode));
root->data = data;
root->lchild = Create();
root->rchild = Create();
}
return root;
}
void enQueue(SqQueue* q, BTNode* t)
{
if ((q->rear + 1) % MaxSize == q->front)
{
printf("error");
return;
}
q->rear = (q->rear + 1) % MaxSize;
q->data[q->rear] = t;
}
BTNode* deQueue(SqQueue* q)
{
if (q->rear == q->front)
{
printf("queue is null !");
return;
}
q->front=(q->front+1)%MaxSize;
return q->data[q->front];
}
//这是用循环队列表做的,循环列表连续不要入队超过MaxSize-1个,不然会覆盖掉有用的数据
void LevelOrder(BTNode* root)
{
SqQueue qu;
BTNode *s;
qu.rear = 0; qu.front = 0;
enQueue(&qu, root);
while (qu.rear!= qu.front)
{
s = deQueue(&qu);
printf("%c", s->data);
if (s->lchild != NULL)
enQueue(&qu, s->lchild);
if(s->rchild!=NULL)
enQueue(&qu,s->rchild);
}
}
int main()
{
BTNode* root;
root=Create();
LevelOrder(root);
return 0;
}
下面是运行结果