您的位置:首页 > 其它

poj 2255——Tree Recovery

2014-07-23 10:47 288 查看
题意:给出二叉树的先序与中序遍历,求后序遍历

代码如下:

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: