链接:点击打开链接
题意:给出一棵树的前序和中序,求后序
代码:
#include <set>
#include <queue>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <algorithm>
using namespace std;
char n,le[30],mid[30];
void dfs(int l1,int r1,int l2,int r2){
int i;
if(l1>r1||l2>r2)
return;
if(l1==r1){
printf("%c",le[l1]);
return;
}
for(i=l2;i<=r2;i++)
if(mid[i]==le[l1])
break;
dfs(l1+1,l1+i-l2,l2,i-1);
dfs(l1+i-l2+1,r1,i+1,r2);
printf("%c",le[l1]);
}
int main(){ //因为前序等于:根+左子树前序+右子树前序
int i; //中序等于:左子树中序+根+右子树中序,二
while(scanf("%s%s",le,mid)!=EOF){ //每个树的前序和中序长度相同,所以只要找
n=strlen(le); //到根在中序的位置,就变成了相同的子问题
dfs(0,n-1,0,n-1); //最后一定会变成叶子节点,合并的时候只要
} //按照左子树+右子树+跟合并即可
return 0;
}