”二叉树队列实现层次遍历“-----编译没有错误,但是结果却一直循环,求高手帮忙
#include<stdio.h>#include<stdlib.h>
#define MaxSize 100
typedef struct BiTNode{
int data;
struct BiTNode *lchild,*rchild;
}BiTNode;
typedef struct Queue{
int data[MaxSize];
int front,rear;
}Queue;
Queue Q;
//初始化队列
int initQueue(Queue &Q)
{
Q.rear=Q.front=0;
return 1;
}
//入队列
int EnQueue(Queue &Q, int x)
{
if((Q.rear+1)%MaxSize==Q.front)
return 0;
else
{
Q.rear=(Q.rear+1)%MaxSize;
Q.data[Q.rear]=x;
return 1;
}
}
//出队列
int DeQueue(Queue &Q,int &x)
{
if(Q.rear==Q.front)
return 0;
else
{
Q.front=(Q.front+1)%MaxSize;
x=Q.data[Q.front];
return 1;
}
}
//判断对空
int QueueEmpty(Queue Q)
{
if(Q.rear==Q.front)
return 1;
else
return 0;
}
//创建二叉树
BiTNode *createBiTree()
{
BiTNode *T;
int x;
printf("请输入一个字符(输入为0时结束):");
scanf("%d",&x);
//ch = getchar();
if(x==0) return(NULL);
else
//while(ch!='#')
{
T=(BiTNode*)malloc(sizeof(BiTNode));
T->data=x;
//printf("请输入一个数(输入为#时结束):\n");
//scanf("%c",&ch);
T->lchild=createBiTree();
T->rchild=createBiTree();
return T;
}
}
//层次遍历二叉树,队列实现之
void layerorder(BiTNode *T)
{
initQueue(Q);
if(T!=NULL) EnQueue(Q,T->data);
BiTNode *p;
p=T;
while(!QueueEmpty(Q))
{
DeQueue(Q,p->data);
printf("%d,",p->data);
if(p->lchild!=NULL) EnQueue(Q,p->lchild->data);
if(p->rchild!=NULL) EnQueue(Q,p->rchild->data);
}
}
void main()
{
BiTNode *root;
root=createBiTree();
layerorder(root);
}