HDU 1710 二叉樹水題
阿新 • • 發佈:2019-02-11
題解
水遞迴, 記得以前剛學資料結構的時候還用結構體模擬字串做
用字串是通過string的find函式, 這裡讀取的時候可以直接記錄先序遍歷的元素在中序中的位置
輸出左右子樹, 然後輸出根
AC code: (78MS, 略慢)
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 1000 + 5;
int pre[maxn], in[maxn], n, pos[maxn];
void creat(int l, int r, int L, int R) {
if (L == R) {
printf("%d ", in[L]);
return;
}
int id = pos[pre[l]];
if(id > L) creat(l + 1, l + id - L, L, id - 1);//邊界, 左
if(id < R) creat(l + 1 + id - L, r, id + 1, R);//右
printf("%d%s", in[id], l == 1 ? "\n" : " ");
}
int main() {
#ifndef ONLINE_JUDGE
freopen("in.txt", "r", stdin);
#endif
while (~scanf("%d", &n)) {
for (int i = 1; i <= n; ++i) scanf("%d", &pre[i]);
for (int i = 1; i <= n; ++i) {
scanf("%d", &in[i]);
pos[in[i]] = i;
}
creat(1, n, 1, n);
}
return 0;
}