链接:Link 耗时: 0.012s

前言

真是疯玩了几天,脑袋都残了,一道弱智题做了近一个小时。

Code

var    pre, mid, s: string;    tree: array [1..50] of record        l, r: integer;        ch: char;    end;    cur: integer;function init: integer;var    m: integer;begin    readln(s);    m := length(s) >> 1 + 1;    pre := Copy(s, 1, m-1);    mid := Copy(s, m+1, length(s));    init := m-1;end;function build(l1, l2, r2: integer): integer;var    m,len: integer;    t: integer;begin    if l2 > r2 then exit(0); //该子树不存在。**这个地方坑了我很久**    inc(cur);    t := cur;      // 这里也坑了我,当下面构造完左右子树后,cur已经变了,所以要缓存起来    build := t;    tree[t].ch := pre[l1];    if r2-l2 = 0 then //叶节点        exit;    m := pos(pre[l1], mid); //在中序遍历中找根节点    len := m - l2;    tree[t].l := build(l1+1, l2, m-1); //构造左子树    tree[t].r := build(l1+len+1, m+1, r2); //构造右子树end;procedure print(x: integer);begin    if x = 0 then exit;    print(tree[x].l);    print(tree[x].r);    write(tree[x].ch);end;begin    assign(input, 'main.in'); reset(input);    assign(output, 'main.out'); rewrite(output);    while not eof do    begin        fillchar(tree, sizeof(tree), 0);        cur := 0;        build(1, 1, init);        print(1);        writeln;    end;    close(input);    close(output);end.