UVA-536 Tree Recovery (二叉树遍历)

题目大意:给出对一棵二叉树先序遍历和中序遍历的顺序,找出后序遍历的顺序。

题目分析:无非就是对字符串的输出顺序做个变化,递归就行了。

 

代码如下:

# include<iostream>
# include<cstdio>
# include<string>
# include<cstring>
# include<algorithm>
using namespace std;

string p,q;
int pos[26];

void f(int l1,int r1,int u,int l2,int r2)
{
    if(l1<r1){
        int minn=100,nu;
        for(int i=l1;i<=r1;++i){
            if(minn>pos[i]){
                minn=pos[i];
                nu=i;
            }
        }
        f(l1,nu-1,nu,nu+1,r1);
    }
    if(l1==r1)
        printf("%c",q[l1]);
    if(l2<r2){
        int minn=100,nu;
        for(int i=l2;i<=r2;++i){
            if(minn>pos[i]){
                minn=pos[i];
                nu=i;
            }
        }
        f(l2,nu-1,nu,nu+1,r2);
    }
    if(l2==r2)
        printf("%c",q[l2]);
    printf("%c",q[u]);
}

int main()
{
    while(cin>>p>>q)
    {
        int l=p.size();
        for(int i=0;i<l;++i){
            for(int j=0;j<l;++j)
                if(q[i]==p[j]){
                    pos[i]=j;
                    break;
                }
        }
        int u;
        for(int i=0;i<l;++i)
            if(p[0]==q[i]){
                u=i;
                break;
            }
        f(0,u-1,u,u+1,l-1);
        printf("\n");
    }
    return 0;
}

  

posted @ 2015-10-06 23:49  20143605  阅读(165)  评论(0编辑  收藏  举报