能帮一下忙修改一下吗?急!
下面是我的一段原程序代码,在levorder函数中可能是由于指针的错误导致这个函数不能运行,能帮我编写一个用队列实现二叉树层序遍历的函数么? 急用,万分感谢!#include<iostream>
#define Null 0
using namespace std;
typedef struct node
{
char data;
struct node *lchild,*rchild;
}bitree;
typedef struct QNode
{
char data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front,rear;
}LinkQueue;
bitree *creat( )
{
bitree *t;
char x;
cin>>x;
if (x=='#')
t=Null;
else
{
t=(bitree*)malloc(sizeof(bitree));
t->data=x;
t->lchild=creat( );
t->rchild=creat( );
}
return t ;
}
void preorder(bitree *t)
{
if (t)
{
cout<<t->data;
preorder(t->lchild);
preorder(t->rchild);
}
}
void InitQueue(LinkQueue *Q)
{
(*Q).front=(*Q).rear=(QueuePtr)malloc(sizeof(QNode));
if((*Q).front)
(*Q).front->next=NULL;
}
char GetHead_Q(LinkQueue Q,char *e)
{
QueuePtr p;
if(Q.front==Q.rear)
return -1;
p=Q.front->next;
*e=p->data;
return 0;
}
void EnQueue(LinkQueue *Q,char e)
{
QueuePtr p=(QueuePtr)malloc(sizeof(QNode));
if(p)
p->data=e;
p->next=NULL;
(*Q).rear->next=p;
(*Q).rear=p;
}
int QueueEmpty(LinkQueue Q)
{
if(Q.front->next==NULL)
return 0;
else
return -1;
}
char DeQueue(LinkQueue *Q,char *e)
{
QueuePtr p;
if((*Q).front==(*Q).rear)
return -1;
p=(*Q).front->next;
*e=p->data;
(*Q).front->next=p->next;
if((*Q).rear==p)
(*Q).rear=(*Q).front;
free(p);
return 0;
}
int Delete(LinkQueue *Q)
{
QueuePtr p;
if((*Q).front==(*Q).rear)
return -1;
p=(*Q).front->next;
(*Q).front=p;
}
void levorder(bitree *t)
{
LinkQueue q;
bitree *a;
if(t)
{
InitQueue(&q);
EnQueue(&q,t->data);
while(QueueEmpty(q)!=-1)
{
DeQueue(&q,&a->data);
cout<<a->data;
if(&a->lchild!=Null)
EnQueue(&q,a->lchild->data);
if(&a->rchild!=Null)
EnQueue(&q,a->rchild->data);
Delete(&q);
}
}
}
int main( )
{
bitree *root;
root=creat( );
cout<<"preorder"<<endl;
preorder(root);
cout<<endl;
cout<<"levorder"<<endl;
levorder(root);
system("pause");
}
谢谢!!
[[it] 本帖最后由 airforcely 于 2008-11-9 08:53 编辑 [/it]]