- 后序中序构造树
- 先序中序构造树
- 字符树使用map做映射
后序,中序构造树:
int build(int L1, int R1, int L2, int R2) {
if(L1 > R1) return 0;
int root = post_order[R2];
int p = L1;
while(in_order[p] != root) p++;
int cnt = p-L1;
lch[root] = build(L1, p-1, L2, L2+cnt-1);
rch[root] = build(p+1, R1, L2+cnt, R2-1);
return root;
}
先序,中序 构造树
int build(int l1,int r1,int l2,int r2)
{
if(l1 > r1)
return 0;
int root = preOrder[l2];
int p = l1;
while(inOrder[p] != preOrder[l2])
p++;
int d = p-l1;
lch[root] = build(l1,p-1,l2+1,l2+d);
rch[root] = build(p+1,r1,l2+d+1,r2);
return root;
}
当构建字符树时,使用map作映射。
map<char,char>lch;
map<char,char>rch;
char preOrder[100];
char inOrder[100];
char build(int l1,int r1,int l2,int r2)
{
if(l1 > r1)
return 0;
char root = preOrder[l2];
int p = l1;
while(inOrder[p] != preOrder[l2])
p++;
int d = p-l1;
lch[root] = build(l1,p-1,l2+1,l2+d);
rch[root] = build(p+1,r1,l2+d+1,r2);
return root;
}