[BOJ] 1991번 트리 순회 - C++

"트리"

Posted by Yongmin on August 18, 2021

문제

트리 순회

풀이

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');
    
}






# # #