通过前序,中序得到后序

View Code
ABEDFCHG
CBADEFGH
if n<=0 return;

int p=先序中的字母在中序中的位置。

Build(p,(
char *)pre+1,(char *)mid); //递归构造左子树的遍历

Build(n
-1-p,pre+p+1,mid+p+1); //递归构造右子树的遍历

#include
<stdio.h>
#include
<string.h>
#define MAXN 1000

char mid[MAXN],pre[MAXN],ans[MAXN];

void Build(int n,char *pre,char *mid,char *ans)
{
if(n<=0) return;
int p=strchr(mid,pre[0])-mid;

Build(p,pre
+1,mid,ans);
Build(n
-1-p,pre+p+1,mid+p+1,ans+p);
ans[n
-1]=pre[0];
}
int main()
{
while(scanf("%s%s",mid,pre)!=EOF)
{
Build(strlen(pre),pre,mid,ans);
printf(
"%s\n",ans);
return 0;
}
}
原文地址:https://www.cnblogs.com/huhuuu/p/1979785.html