因为是完全二叉树,所以可以用数组模拟,原理同树状数组。
后序遍历倒过来就是根-右-左。数据结构课上也是这样建树的。
#include <bits/stdc++.h> #define sc(x) scanf("%d", &(x)) #define pr(x) printf("%d ", x) using namespace std; typedef long long ll; const int N = 1e5 + 7; const ll mod = 1e9 + 7; int post[N], a[N]; int n, p = 1; void build(int i) { if (p > n || i > n) return; a[i] = post[p++]; build(i * 2 + 1); build(i * 2); } int main() { sc(n); for (int i = 0; i < n; ++i) sc(post[n - i]); build(1); for (int i = 1; i <= n; ++i) pr(a[i]); return 0; }
比赛的时候去看后面一题了。算是策略不对吧。
坦白说天梯赛几乎没练,但也觉得分数对得起团队了。