문제
풀이
preorder, postorder, inorder 트리 순회를 출력하는 문제이다. preorder란 루트-왼쪽-오른쪽, inorder란 왼쪽-루트-오른쪽, postorder란 왼쪽-오른쪽-루트로 순회하는 트리를 의미한다. dfs에서 각자의 출력에 맞게 printf 배치하여 정답을 출력한다.
소스 코드
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
#include <iostream>
using namespace std;
char map[27][2];
void preorder(char start){
if(start == '.'){
return;
}
printf("%c", start);
preorder(map[start - 'A'][0]);
preorder(map[start - 'A'][1]);
}
void inorder(char start){
if(start == '.'){
return;
}
inorder(map[start-'A'][0]);
printf("%c", start);
inorder(map[start-'A'][1]);
}
void postorder(char start){
if(start == '.'){
return;
}
postorder(map[start-'A'][0]);
postorder(map[start-'A'][1]);
printf("%c", start);
}
int main(){
int N;
scanf("%d", &N);
for(int i = 0; i<N; i++){
char root, left, right;
scanf(" %c %c %c", &root, &left, &right);
map[root - 'A'][0] = left;
map[root - 'A'][1] = right;
}
preorder('A');
printf("\n");
inorder('A');
printf("\n");
postorder('A');
}