Question:题目详情(http://vjudge.net/contest/134361#problem/F)
题目大意:给你一棵树的前序遍历和中序遍历,让你输出后序遍历
解题思路:就单纯的建树并输出后序遍历即可
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char q[30],z[30];
void build(int L1,int R1,int L2,int R2) //建树
{
if(L1>R1) return ;
int t;
for(t=0;z[t]!=q[L1];t++); //找到中序遍历中根的位置
build(L1+1,L1+t-L2,L2,t-1); //先建左树
build(L1+t-L2+1,R1,t+1,R2); //再建右树
printf("%c",q[L1]); //最后输出根节点
}//递归建树
int main()
{
while(~scanf("%s%s",q,z))
{
int len=strlen(q)-1;
build(0,len,0,len);
printf("\n");
}
return 0;
}
体会:基本建树,全程无套路