#define SZ(x) (int)(x.size())
const int inf = 0x3f3f3f3f;
string s = "ab##C##"; //按前序遍历给出树
struct Node {
int val;
int l,r;
Node() {
l = r = val = -1;
}
}t[100010];
// 不建议:非常浪费空间。
void built(int i) {
if (idx < SZ(s)) {
if (s[idx] == '#') {
idx++;
return;
}
t[i].val = idx++;
t[i].l = 2 * i;
t[i].r = 2 * i + 1;
built(2 * i);
built(2 * i + 1);
}
}
// 建议
int now = 0 + 1;
int idx = 0;
void built (int i) {
if (idx < SZ(s)) {
if (s[idx] == '#') {
idx++;
return;
}
t[i].val = idx++;
t[i].l = now;
built(now++);
t[i].r = now;
built(now++);
}
};
// 用法 built(0);