SDUTOJ1489求二叉樹的先序遍歷
阿新 • • 發佈:2018-12-13
求二叉樹的先序遍歷
Time Limit: 1000 ms Memory Limit: 65536 KiB
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; }