寒假版本:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define m 3
typedef char type;
typedef struct node
{
type info;
struct node *child[m];
}node,*tree;
tree root;
//按照前序顺序输入一棵树
tree createtree()
{
int i;
char ch;
tree t;
if((ch=getchar())=='#')t=NULL;
else
{
t=(tree)malloc(sizeof(node));
t->info=ch;
for(i=0;i<m;i++)
t->child[i]=createtree();
}
return t;
}
//前序遍历输出树
void preorder(tree p)
{
int i;
if(p!=NULL)
{
printf("%c ",p->info);
for(i=0;i<m;i++)
preorder(p->child[i]);
}
}
//后序遍历输出树
void postorder(tree p)
{
int i;
if(p!=NULL)
{
for(i=0;i<m;i++)
postorder(p->child[i]);
printf("%c ",p->info);
}
}
//层次遍历输出树
void levelorder(tree t)
{
tree queue[100];
int f,r,i;
tree p;
f=0;r=1;queue[0]=t;
while(f<r)
{
p=queue[f];//出队,并输出
f++;
printf("%c ",p->info);
for(i=0;i<m;i++)
{
if(p->child[i])
{
queue[r]=p->child[i];
r++;
}
}
}
}
void destory(tree t)
{
tree queue[100];
int f,r,i;
tree p;
f=0;r=1;queue[0]=t;
while(f<r)
{
p=queue[f];
f++;
for(i=0;i<m;i++)
{
if(p->child[i])
{
queue[r]=p->child[i];
r++;
}
}
if(p)
{
free(p);
printf("del\n");
}
}
}
int main()
{
tree A=createtree();
preorder(A);
printf("\n");
//AB###CE###FH#####G###D###
postorder(A);
printf("\n");
levelorder(A);
printf("\n");
destory(A);
return 0;
}
课余版本:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<time.h>
#define MAX 2
typedef int type;
typedef struct node
{
type data;
struct node*child[MAX];
}tnode,*tree;
tree creat()
{
int x,i;
tree t;
scanf("%d",&x);
if(x==0)
t=NULL;
else
{
t=(tnode*)malloc(sizeof(tnode));
t->data=x;
for(i=0; i<MAX; i++)
t->child[i]=creat();
}
return t;
}
void preorder(tree t)
{
if(t)
{
int i;
printf("%d ",t->data);
for(i=0;i<MAX;i++)
preorder(t->child[i]);
}
}
void postorder(tree t)
{
if(t)
{ int i;
for(i=0;i<MAX;i++)
postorder(t->child[i]);
printf("%d ",t->data);
}
}
void levelorder(tree t)
{
tree queue[100];
int front=0,rear=0,i;
if(t)queue[rear++]=t;
while(front<rear)
{
tree p=queue[front++];
printf("%d ",p->data);
for(i=0;i<MAX;i++)
if(p->child[i])
queue[rear++]=p->child[i];
}
}
void destory(tree t)
{
tree queue[100];
int front=0,rear=0,i;
if(t)queue[rear++]=t;
while(front<rear)
{
tree p=queue[front++];
for(i=0;i<MAX;i++)
if(p->child[i])
queue[rear++]=p->child[i];
//printf("del :%d\n",p->data);
free(p);
}
}
void test()
{
tree t=creat();
printf("\npreorder:\t"); preorder(t);
printf("\npostorder:\t"); postorder(t);
printf("\nlevelorder:\t"); levelorder(t);
destory(t);
}
int main()
{
//1 2 4 0 7 0 0 5 0 0 3 0 6 0 0
test();
}