1. 程式人生 > >HDU 1710 二叉樹水題

HDU 1710 二叉樹水題

題解

水遞迴, 記得以前剛學資料結構的時候還用結構體模擬字串做
用字串是通過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; }