因为是完全二叉树,所以可以用数组模拟,原理同树状数组。

后序遍历倒过来就是根-右-左。数据结构课上也是这样建树的。

#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;
}

比赛的时候去看后面一题了。算是策略不对吧。

坦白说天梯赛几乎没练,但也觉得分数对得起团队了。