- #include <stdio.h>
- #include<stdlib.h>
- typedef struct Bitree
- {
- int data;
- struct Bitree *Lchild,*Rchild;
- }BitreeNode,*LinkBitree;
- typedef struct QueueList
- {
- LinkBitree data[20];
- int front,rear;
- }QueueList,*LinkQueue;
- LinkBitree CreatBitree();
- void LevelOrderTraverse(LinkBitree);
- void InitQueue(LinkQueue);
- int main()
- {
- LinkBitree BitreeHead;
- printf("请输入根结点的值e:");
- BitreeHead=CreatBitree();
- LevelOrderTraverse(BitreeHead);
- return 0;
- }
- LinkBitree CreatBitree()
- {
- int e_data;
- LinkBitree BitreeHead;
- scanf("%d",&e_data);
- if(e_data!=0)
- {
- BitreeHead=(LinkBitree)malloc(sizeof(BitreeNode));
- if(BitreeHead==NULL)
- {
- printf("Error!!");
- }
- else
- {
- BitreeHead->data=e_data;
- printf("请输入结点%d的左孩子结点的值:e= ",BitreeHead->data);
- BitreeHead->Lchild=CreatBitree();
- printf("请输入结点%d的右孩子结点的值:e= ",BitreeHead->data);
- BitreeHead->Rchild=CreatBitree();
- }
- }
- else
- {
- BitreeHead=NULL;
- }
- return BitreeHead;
- }
- void LevelOrderTraverse(LinkBitree BitreeHead)
- {
- LinkQueue Q;
- Q=(LinkQueue)malloc(sizeof(sizeof(QueueList)));
- InitQueue(Q);
- if(BitreeHead!=NULL)
- {
- Q->data[Q->rear]=BitreeHead;
- Q->rear=Q->rear+1;
- }
- while(Q->front!=Q->rear)
- {
- printf("%d ",Q->data[Q->front]->data);
- if(Q->data[Q->front]->Lchild!=NULL)
- {
- Q->data[Q->rear]=Q->data[Q->front]->Lchild;
- Q->rear=Q->rear+1;
- }
- if(Q->data[Q->front]->Rchild!=NULL)
- {
- Q->data[Q->rear]=Q->data[Q->front]->Rchild;
- Q->rear=Q->rear+1;
- }
- Q->front=Q->front+1;
- }
- }
- void InitQueue(LinkQueue Q)
- {
- Q->front=Q->rear=0;
- }
- //该片段来自于http://www.codesnippet.cn/detail/180620134108.html
来源: http://www.codesnippet.cn/detail/180620134108.html