大家好,刚来到论坛不知道怎样称呼大家
我想请高手们给我写一个 图形演示遍历二叉树
好像图形演示要用到计算机图形学的知识,我一点都不会。 高手帮忙啊。
我在网上找了一个二叉树层次遍历的程序,但没调试通过,帮我改改
谢谢
#include"stdio.h"
#include"malloc.h"
#define MAX 100
typedef char TDataType;
typedef struct TreeNode
{TDataType data;
  struct TreeNode*lchild,*rchild;
}TreeNode,*Tree;
typedef Tree QDataType;
typedef struct
{QDataType data[MAX+1];
int front,rear;
}Queue;
//(1)初始化队列q
void InitQueue(Queue &q)
{
q.front=0;
q.rear=0;
}
//(2)判断队列q是否非空;
int EmptyQueue(Queue &q)
{
if(q.rear==q.front) return 1;
else return 0;
}
//(3)依次进队元素a,b,c
void InsqQueue(Queue &q,QDataType x)
{
if(q.rear==MAX){printf("overflow"); }
q.rear++;
q.data[q.rear]=x;
}
//(4)出队一个元素,输出该元素;
OutsqQueue(Queue &q,Tree &p)
{
if(EmptyQueue(q))
{
  printf("underflow");
  return 0;
}
else
{
  p=q.data[q.front+1];
// printf("%c",x);
     q.front++;
}
if(EmptyQueue(q)){q.front=0;q.rear=0;}
return 1;
}
//(5)输出队列的元素个数;
int NumberQueue(Queue &q)
{
if(EmptyQueue(q)) return 0;
else return(q.rear-q.front);
}
//(8)输出出队序列;  begin
int DisplaySqQueue(Queue &q)
{
   int i;
   if(EmptyQueue(q))return 1;
   for(i=1;i<=q.rear;i++)
   {
    printf("%c",q.data[q.front+1]);
    q.front++;
   }
   printf("\n");
   return 1;
}
//n(9)释放队列。
void DestroyList_SqQueue(Queue &q)
{
   if(EmptyQueue(q)==0)
    q.front=0;q.rear=0;
}
Tree CreateTree(Tree &r)
{
    char c;
    scanf("%c",&c);
if(c==' ')r=NULL;
else
{
  r=(Tree)malloc(sizeof(TreeNode));
  if(!r)return(NULL);
  r->data=c;
  r->lchild = CreateTree(r->lchild);
  r->rchild = CreateTree(r->rchild);
}
return(r);
}
//先序遍历二叉树
void Preorder(Tree r)
{
if(r)
{
  printf("%c",r->data);
        Preorder(r->lchild);
  Preorder(r->rchild);
}
}
//中序遍历二叉树
void midorder(Tree r)
{
if(r)
{
  midorder(r->lchild);
  printf("%c",r->data);
  midorder(r->rchild);
}
}
//后序遍历二叉树
void postorder(Tree r)
{
   if(r)
   {
    postorder(r->lchild);
    postorder(r->rchild);
    printf("%c",r->data);
   }
}
//层次遍历二叉树
void TravelTree(Tree r)
{
Queue q;
InitQueue(q);
Tree p,p1,p2;
p=r;//(Tree)malloc(sizeof(TreeNode));
if(p)InsqQueue(q,p);
while(!EmptyQueue(q))
{
  OutsqQueue(q,p);
  printf("%c",p->data);
  p1=p->lchild;p2=p->rchild;
  if(p1) InsqQueue(q,p1);
  if(p2) InsqQueue(q,p2);
}
}
void main()
{
Tree r;
printf("初始化树\n");
    CreateTree(r);
printf("\n先序遍历二叉树\n");
    Preorder(r);
printf("\n中序遍历二叉树\n");
    midorder(r);
    printf("\n后序遍历二叉树\n");
postorder(r);
    printf("\n层序遍历二叉树\n");
TravelTree(r);
}



 
											





 
	    

 
	