</pre>已知后序和中序,计算先序的(c/c++)方法实现<pre code_snippet_id="666483" snippet_file_name="blog_20150514_2_7785140" name="code" class="cpp">
#include<iostream>
#include<cstring>
using namespace std;
char epi[30];
char in[30];
int find(char c,char a[],int s,int e)
{
for(int i=s; i<=e; i++)
if(a[i]==c) return i;
}
void epinum(char epi[],int epi_s,int epi_e,char in[],int in_s,int in_e)
{
char c;
int k;
//printf("****************\n");
if(in_s>in_e)return;
if(in_s==in_e)
{
printf("%c",in[in_s]);
return;
}
c=epi[epi_e];
k=find(c,in,in_s,in_e);
printf("%c",c);/*根节点输出*/
epinum(epi,epi_s,epi_s+k-in_s-1,in,in_s,k-1);/*递归求解分割的左子树*/
epinum(epi,epi_s+k-in_s,epi_e-1,in,k+1,in_e);/*递归求解分割的右子树*/
}
int main()
{
while(scanf("%s%s",epi,in)!=EOF)
{
epinum(epi,0,strlen(epi)-1,in,0,strlen(in)-1);
printf("\n");
}
return 0;
}