静态二叉树建立

#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 @   Uzhia  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示