1. 程式人生 > >1364:二叉樹遍歷(flist)

1364:二叉樹遍歷(flist)

【題目描述】

樹和二叉樹基本上都有先序、中序、後序、按層遍歷等遍歷順序,給定中序和其它一種遍歷的序列就可以確定一棵二叉樹的結構。

假定一棵二叉樹一個結點用一個字元描述,現在給出中序和按層遍歷的字串,求該樹的先序遍歷字串。

【輸入】

兩行,每行是由字母組成的字串(一行的每個字元都是唯一的),分別表示二叉樹的中序遍歷和按層遍歷的序列。

【輸出】

一行,表示二叉樹的先序序列。

【輸入樣例】

DBEAC
ABCDE

【輸出樣例】

ABDEC

知道中序和層序,因為層序是先輸出根節點的,所以可以遞迴查詢,知道中序和另一個都是遞迴往下查詢,都是依靠根來遞迴實現的,其實瞭解了原理並不難

#include<bits/stdc++.h>
using namespace std;
string s1,s2;

void f(int l1,int r1,int l2,int r2)
{
    int i,j;
    for(i=l2;i<=r2;i++){
        int t=0;
        for(j=l1;j<=r1;j++){
            if(s2[i]==s1[j]){
                cout<<s1[j];
                t=1;
                break;
            }
        }
        if(t) break;

    }
    if(j>l1) f(l1,j-1,0,r2);
    if(j<r1) f(j+1,r1,0,r2);
}
int main()
{
    ios::sync_with_stdio(false);
    cin>>s1>>s2;
    f(0,s1.size()-1,0,s2.size()-1);

    return 0;
}