题意:给出二叉树的先序与中序遍历,求后序遍历
代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
bool vis[30];
string pre,in;
void dfs(int nowpre)
{
if(nowpre>=pre.size())return;
if(vis[pre[nowpre]-'A'])return;
vis[pre[nowpre]-'A']=1;
for(int i=0;i<in.size();++i)
{
if(pre[nowpre]==in[i])
{
int j;
for(j=0;j<i;++j)
{
if(!vis[in[j]-'A'])break;
}
int len=i-j;
for(j=i+1;j<pre.size();++j)
{
if(vis[in[j]-'A'])break;
}
int lenr=j-i-1;
if(len>0)
dfs(nowpre+1);
if(lenr>0)
{dfs(nowpre+1+len);}
break;
}
}
printf("%c",pre[nowpre]);
}
int main()
{
//freopen("data.txt","r",stdin);
while(cin>>pre>>in)
{
memset(vis,false,sizeof(vis));
dfs(0);
printf("\n");
}
return 0;
}