求先序排列(二叉树已知中序和后序,求先序)

问题 A: [2001_p3]求先序排列

时间限制: 1 Sec  内存限制: 125 MB

题目描述

给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度<=8)。

 

输入

每个测试文件只包含一组测试数据,每组输入包含两行,第一行输入一个字符串表示二叉树的中序排列,第二行输入一个字符串表示二叉树的后序排列。

 

输出

对于每组输入数据,输出二叉树的先序排列。

 

样例输入

BADC
BDCA

样例输出

ABCD

提示

#include<iostream>
#include<bits/stdc++.h>
using namespace std;
string s1,s2;
void print(int l1,int r1,int l2,int r2)
{
    //cout<<" "<<l1<<" "<<r1<<" "<<l2<<" "<<r2<<endl;
    /*if(r1<=l1)
    {
        cout<<s1[l1];
        return;
    }
    if(r2<=l1)
    {
        cout<<s2[l1];
        return;
    }*/
    int k=-1;
    for(int i=l1;i<r1;i++)
    {
        if(s1[i]==s2[r2-1])
        {
            cout<<s1[i];
            k=i;
            break;
        }
    }
    //cout<<"k "<<k<<endl;
    if(k>l1)
    {
        //cout<<"进入左"<<endl;
        print(l1,k,l2,k-l1+l2);
    }
    if(r1>k+1)
    {
        //cout<<"进入右"<<endl;
        print(k+1,r1,k-l1+l2,r2-1); 
    }
    
 } 
int main()
{
    cin>>s1>>s2;
    print(0,s1.length(),0,s2.length());
    return 0;
 }