为什么我的程序执行到一半,它就显示按任意键退出。
谢谢,这个困惑我两个星期了,我实在不知道怎么解决,拜托了
//利用顺序储存方式的队列;创建和遍历 层序二叉树
#include <stdio.h>
#include <stdlib.h>
#define elementtype int
struct bintree
{
bintree* left;
bintree* right;
elementtype data;
};
typedef struct bintree bintree;
struct queue//顺序存储方式 的队列结构体
{
bintree** DATA;
int front;
int rear;
int maxsize;
};
typedef struct queue queue;
queue* creatqueue(int n);
bool insertqueue(queue* Q,bintree* x);
bintree* outputqueue(queue* Q);
void display(queue* Q);
bintree* creatbintree();
void level_order_traversal(bintree* BT);
int main()
{
bintree* BT=creatbintree();
level_order_traversal(BT);
}
queue* creatqueue(int n)//创建空队列
{
queue* Q=(queue*)malloc(sizeof(queue));
Q->DATA=(bintree**)malloc(sizeof(bintree*));
Q->front=Q->rear=0;
Q->maxsize=n;
return Q;
}
bool insertqueue(queue* Q,bintree* x)//入队列
{
if((Q->rear+1)%Q->maxsize==Q->front)
{
printf("队列已满!");
return false;
}
else
{
Q->rear=(Q->rear+1)%Q->maxsize;
Q->DATA[Q->rear]=x;
return true;
}
}
bintree* outputqueue(queue* Q)//出队列
{
bintree* t;
if(Q->rear%Q->maxsize==Q->front)
{
printf("队列为空!");
return NULL;
}
else
{
Q->front=(Q->front+1)%Q->maxsize;
t=Q->DATA[Q->front];
return t;
}
}
void display(queue* Q)//展示队列内的数据
{
int i=Q->front+1;
while(i%Q->maxsize!=Q->rear%Q->maxsize )
{
i=i%Q->maxsize;
printf("%d",Q->DATA[i]->data);
i++;
}
printf("%d\n",Q->DATA[Q->rear]->data);
}
bintree* creatbintree()//创建层序二叉树
{
bintree* BT,*T;
queue* Q=creatqueue(20);
elementtype x;
scanf("%d",&x);//根节点
if(x!=0) //根结点为0则二叉树为空
{
BT=(bintree*)malloc(sizeof(bintree));
BT->data=x;
BT->left=BT->right=NULL;
insertqueue(Q,BT);//根结点入队列
}
else return NULL;
while(Q)//队列不为空则还有子结点
{
T=outputqueue(Q);//按层序方式,结点出队列
printf("删除的数是:%d\n",T->data);
scanf("%d",&x);//输入该结点左孩子
if(x==0) T->left=NULL;
else
{
T->left=(bintree*)malloc(sizeof(bintree));
T->left->data=x;
T->left->left=T->left->right=NULL;
insertqueue(Q,T->left);
}
printf("这个数的左孩子是:%d\n",T->left->data);
scanf("%d",&x);//输入该结点右孩子
if(x==0) T->right=NULL;
else
{
T->right=(bintree*)malloc(sizeof(bintree));
T->right->data=x;
T->right->left=T->right->right=NULL;
insertqueue(Q,T->right);
}
printf("这个数的右孩子是:%d\n",T->right->data);
display(Q);//输出此时队列内的数据
}
return BT;//返回根结点
}
void level_order_traversal(bintree* BT)//层序递归遍历
{
queue* Q=creatqueue(20);
bintree* T;
if(!BT) return;
insertqueue(Q,BT);
while(Q)
{
T=outputqueue(Q);
printf("%d",T->data);
if(T->left) insertqueue(Q,T->left);
if(T->right) insertqueue(Q,T->right);
}
}