层次遍历 显示结果总是崩溃。!
程序代码:#include<stdio.h>
#include<stdlib.h>
typedef int Elemtype;
typedef struct BiTNode
{
Elemtype data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
typedef struct QNode
{
BiTree data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
int Init_Queue(LinkQueue &Q)
{
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q.front)
return 0;
Q.front->next=NULL;
return 1;
}
int EnQueue(LinkQueue &Q,BiTree T)
{
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!p)
return 0;
p->data=T;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return 1;
}
int DeQueue(LinkQueue Q,BiTree &T)
{
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if(Q.front==Q.rear)
return 0;
p=Q.front->next;
T=p->data;
Q.front->next=p->next;
if(Q.rear==p)
{
Q.rear=Q.front;
}
free(p);
return 1;
}
int DestroyQueue(LinkQueue &Q)
{
while(Q.front)
{
Q.rear=Q.front->next;
free(Q.front);
Q.front=Q.rear;
}
return 1;
}
int QueueEmpty(LinkQueue &Q)
{
if(Q.front==Q.rear)
return 1;
else
return 0;
}
int creat_BiTree(BiTree &T)
{
int ch;
ch=getchar();
if(ch=='#')
T=NULL;
else
{
T=(BiTree)malloc(sizeof(BiTNode));
if(!T)
return 0;
T->data=ch;
creat_BiTree(T->lchild);
creat_BiTree(T->rchild);
}
return 1;
}
int HierachyBiTree(BiTree &T)
{
LinkQueue Q;
BiTree p;
Init_Queue(Q);
if(T==NULL)
return 0;
p=T;
printf("%c ",T->data);
if(p->lchild)
EnQueue(Q,p->lchild);
if(p->rchild)
EnQueue(Q,p->rchild);
while(!QueueEmpty(Q))
{
DeQueue(Q,p);
printf("%c ",p->data);
if(p->lchild)
EnQueue(Q,p->lchild);
if(p->rchild)
{
EnQueue(Q,p->rchild);
}
}
DestroyQueue(Q);
putchar(10);
return 1;
}
层次遍历 ,总是结果不正确,总是崩溃。。主函数只是简单的调用,就一句话。不知道哪里出错了。看了半天没看出来,期待大神的指点!









