题意:给定一颗树的先根遍历和中根遍历,然后求后根遍历。
思路:先根遍历的第一个为root,然后找到root在中根的位置,进而递归左右儿子求解。
code:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;char s1[30],s2[30];void sol(int p1,int p2,int q1,int q2)
{if (p1>p2) return;int i=0;for (i=q1;s2[i]!=s1[p1];i++);sol(p1+1,p1-q1+i,q1,i-1);sol( p1+i-q1+1,p2,i+1,q2);printf("%c",s2[i]);
}
int main()
{while (cin>>s1>>s2){int len=strlen(s1)-1;sol(0,len,0,len);puts("");}
}