层次遍历 显示结果总是崩溃。!
程序代码:
#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; }层次遍历 ,总是结果不正确,总是崩溃。。主函数只是简单的调用,就一句话。不知道哪里出错了。看了半天没看出来,期待大神的指点!