-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathUVA-536.cpp
63 lines (57 loc) · 1.08 KB
/
UVA-536.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include<stdio.h>
#include<string.h>
char preord[30];
char inord[30];
char postord[30];
int posti;
struct Node {
char c;
Node * left, * right;
};
Node * getTree(int begpre, int endpre, int begin, int endin) {
int i;
if(begpre > endpre) return NULL;
Node * p = new Node();
p->c = preord[begpre];
p->left = NULL;
p->right = NULL;
if(begpre == endpre) {
return p;
}
for(i = begin; i != endin; ++i) {
if(preord[begpre] == inord[i]) break;
}
int leftLen = i - begin;
int rightLen = endin - i;
if(leftLen != 0) {
p->left = getTree(begpre + 1, begpre + leftLen, begin, i - 1);
}
if(rightLen != 0) {
p->right = getTree(begpre + leftLen + 1, endpre, i + 1, endin);
}
return p;
}
void postTra(Node * p) {
if(!p) return;
if(p->left) {
postTra(p->left);
}
if(p->right) {
postTra(p->right);
}
postord[posti++] = p->c;
delete p;
}
int main() {
int len;
while(scanf("%s %s", preord, inord) == 2) {
len = strlen(preord);
Node * tree;
tree = getTree(0, len - 1, 0, len - 1);
posti = 0;
postTra(tree);
postord[posti] = 0;
printf("%s\n", postord);
}
return 0;
}