| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 366 人关注过本帖
标题:能帮一下忙修改一下吗?急!
只看楼主 加入收藏
airforcely
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-11-9
收藏
 问题点数:0 回复次数:0 
能帮一下忙修改一下吗?急!
下面是我的一段原程序代码,在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]]
搜索更多相关主题的帖子: include 二叉树 
2008-11-09 08:35
快速回复:能帮一下忙修改一下吗?急!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030138 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved