由前序遍历和中序遍历输出后序遍历
<span style="color:#000000;">#include<stdio.h>
#include<string.h>
void print_build(int n, char*s1, char* s2)
{
if(n <= 0)
return ;
int p = strchr(s2, s1[0])-s2;
print_build(p, s1+1, s2);
print_build(n-p-1, s1+p+1, s2+p+1);
printf("%c",s1[0]);
}
int main()
{
char s1[20],s2[20];
while(~scanf("%s%s",s1, s2))/*输入前序遍历和中序遍历*/
{
int n = strlen(s1);
print_build(n, s1, s2);
printf("\n");
}
return 0;
}</span>
有后序遍历和中序遍历输出前序遍历
<span style="color:#000000;">#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
void print_build(int n, char* s1, char* s2)
{
if(n<=0)
return ;
printf("%c",s1[0]);
int p = strchr(s2,s1[0])-s2;
print_build(p, s1+n-p, s2);
print_build(n-p-1,s1+1,s2+p+1);
}
int main()
{
char s1[20],s2[20];
while(~scanf("%s%s",s1,s2))/*输入后序遍历和中序遍历*/
{
int n = strlen(s1);
reverse(s1,s1+n);
print_build(n, s1, s2);
printf("\n");
}
return 0;
}</span>