在这里做个小总结吧:
对于树的三种遍历
如果给定前序遍历和后序遍历,中序遍历不一定是确定的;
但是给定中序与后序排列,是可以确定前序的;
并且给定前序和中序也是可以确定后序的。
这道题就讨论第二种情况:
重点就是先找到根,然后在递归就可以了~
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <vector>
#include <queue>
#include <map>
#include <stack>
#define modulo 100
const int MAXN = 30;
using namespace std;
char a[MAXN], b[MAXN];//a为中序,b为后序
void build(int l1, int r1, int l2, int r2) {
//printf("l1 is %d, r1 is %d, l2 is %d, r2 is %d\n", l1, r1, l2, r2);
for (int i = l1; i <= r1; i++) {
if (a[i] == b[r2]) {
printf("%c", b[r2]);
build(l1, i-1, l2, l2+i-l1-1);
build(i+1, r1, l2 + i - l1, r2-1);
return ;
}
}
}
int main() {
scanf("%s%s", a + 1, b + 1);
build(1, strlen(a + 1), 1, strlen(b + 1));
printf("\n");
return 0;
}