//根据先序序列和中序序列建立树并求其后序序列
#include<stdio.h>
#include<malloc.h>
#include<string.h>
typedef struct tree
{
char data;
tree *lchild,*rchild;
}tree,*stree;
//a---先序,b---中序
void create(stree &t,char *a,char *b,int num)
{
int k;
char *p=NULL;
if(num==0)
t=NULL;
else
{
p=b;
while(*p!=*a) p++;
k=p-b;
t=(stree)malloc(sizeof(tree));
t->data=*a;
//先序和中序的起点,加上个数
create(t->lchild,a+1,b,k);
create(t->rchild,a+k+1,p+1,num-k-1);
}
}
void postorder(stree t)
{
if(t)
{
postorder(t->lchild);
postorder(t->rchild);
printf("%c",t->data);
}
}
void main()
{
int len;
char a[20],b[20];
stree t;
printf("请输入你的先序序列:/n");
scanf("%s",a);
printf("请输入你的中序序列:/n");
scanf("%s",b);
len=strlen(a);
create(t,a,b,len);
printf("后序遍历是:/n");
postorder(t);
printf("/n");
}
/*
请输入你的先序序列:
abcdefg
请输入你的中序序列:
cdbaegf
后序遍历是:
dcbgfea
Press any key to continue
*/