大家好,刚来到论坛不知道怎样称呼大家
我想请高手们给我写一个 图形演示遍历二叉树
好像图形演示要用到计算机图形学的知识,我一点都不会。 高手帮忙啊。
我在网上找了一个二叉树层次遍历的程序,但没调试通过,帮我改改
谢谢
#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);
}