4.3二叉树的层次遍历王道数据结构例程实现
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
#define MaxSize 50
typedef struct BiTNode{
ElemType data;
struct BiTNode *lchild,*rchild;
} BiTNode,*BiTree;
typedef struct{
BiTree data[MaxSize];
int front,rear;
} SqQueue;
void InitQueue(SqQueue &Q){
Q.front=Q.rear=0;
}
bool IsEmpty(SqQueue Q){
if(Q.front==Q.rear)
return true;
else
return false;
}
bool EnQueue(SqQueue &Q,BiTree x){
if((Q.rear+1)%MaxSize==Q.front)
return false;
Q.data[Q.rear]=x;
Q.rear=(Q.rear+1)%MaxSize;
return true;
}
bool DeQueue(SqQueue &Q,BiTree &x){
if(Q.front==Q.rear)
return false;
x=Q.data[Q.front];
Q.front=(Q.front+1)%MaxSize;
return true;
}
BiTree CreateBiTree(BiTree &T){
int x;
printf("请输入下一个数字\n");
scanf("%d",&x);
if(x!=0){
T=(BiTree)malloc(sizeof(BiTNode));
T->data=x;
T->lchild=NULL;
T->rchild=NULL;
T->lchild=CreateBiTree(T->lchild);
T->rchild=CreateBiTree(T->rchild);
}
return T;
}
void LevelOrder(BiTree T){
SqQueue Q;
InitQueue(Q);
BiTree p;
EnQueue(Q,T);
while(!IsEmpty(Q)){
DeQueue(Q,p);
int a=p->data;
printf(" %d",a);
if(p->lchild!=NULL)
EnQueue(Q,p->lchild);
if(p->rchild!=NULL)
EnQueue(Q,p->rchild);
}
}
int main(){
BiTree T;
CreateBiTree(T);
printf("层次遍历输出\n");
LevelOrder(T);
}