一个简单的由先序和中序求后序的题,但是我多加了一个1,弄了半天
智商捉急。。。
#include <stdio.h>
#include <stdlib.h>
int search(char s[],char key)
{
int i ;
for(i=0;s[i];i++)
{
if(s[i]==key)
{
return i;
}
}
}
void creat(char s1[],char s2[],char s3[],int n) //n表示编号从0,1...n-1
{
char key;
int position;
if(s2[0]&&n>=0)
{
key=s2[0];
position=search(s1,key);
s3[n]=key;
creat(s1,s2+1,s3,position-1); //相当于将中序分为两个部分,然后不停的递归
creat(s1+position+1,s2+position+1,s3+position,n-position-1);//注意最后两个参数的值。
}
}
int main()
{
FILE *fin=fopen("heritage.in","r");
FILE *fout=fopen("heritage.out","w");
char preorder[30]={0};
char inorder[30]={0};
char postorder[30]={0};
int n;
fscanf(fin,"%s",inorder);
fscanf(fin,"%s",preorder);
n=strlen(inorder);
creat(inorder,preorder,postorder,n-1);
fprintf(fout,"%s\n",postorder);
return 0;
}