静态二叉树建立

#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);
posted @ 2022-10-27 22:07  Uzhia  阅读(20)  评论(0)    收藏  举报