1. 程式人生 > >SDUTOJ1489求二叉樹的先序遍歷

SDUTOJ1489求二叉樹的先序遍歷

求二叉樹的先序遍歷

Time Limit: 1000 ms Memory Limit: 65536 KiB

Submit Statistic

Problem Description

 已知一棵二叉樹的中序遍歷和後序遍歷,求二叉樹的先序遍歷

Input

 輸入資料有多組,第一行是一個整數t (t<1000),代表有t組測試資料。每組包括兩個長度小於50 的字串,第一個字串表示二叉樹的中序遍歷序列,第二個字串表示二叉樹的後序遍歷序列。 

Output

 輸出二叉樹的先序遍歷序列

Sample Input

2
dbgeafc
dgebfca
lnixu
linux

Sample Output

abdegcf
xnliu

Hint

 

Source

GYX

 

 

#include <bits/stdc++.h>
using namespace std;
char s1[100], s2[100], ans[100];
int cnt;
void make(int len, char *s1, char *s2) // 中序、後序 推前序 s1中序s2後序
{
    if (len <= 0)
        return;
    int i = strchr(s1, s2[len - 1]) - s1; // 從s1中搜索s2[len-1] 並返回地址,地址減去首地址即為子樹長度
    ans[cnt++] = s2[len - 1];
    make(i, s1, s2);                       // 遞迴搜尋左子樹
    make(len - i - 1, s1 + i + 1, s2 + i); //遞迴搜素右子樹 存到地址之後
}
int main()
{
    int n;
    cin >> n;
    while (n--)
    {
        scanf("%s %s", s1, s2);
        cnt = 0;
        int len = strlen(s1);
        make(len, s1, s2);
        ans[len] = '\0'; // 不要忘記封口
        cout << ans << endl;
    }
    return 0;
}