728x90

 0. [c++] 백준  


https://www.acmicpc.net/problem/1991


 1. 풀이

1) tuple을 활용하여 문제를 해결하려 생각하였지만, 생각보다 구현이 어려워서 그냥 간단하게 2차원 char 배열을 만들어서 tree를 구현하였다.


2) 내가 구현해놓은 코드는 매번 자신의 위치를 찾기 위해서 전체 노드를 반복하면서 탐색을 하는 구현이었는데, 생각해보니 정말 느리게 구현을 해놓은 것 같다.

어짜피 입력이 대문자 순으로 들어오기 때문에, rootID - 'A'라는 구현을 했어도 상관이 없었다.


3) key라는 배열을 따로 만들어서 순서를 저장해주었다.


 2. 소스코드


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
#include<iostream>
 
using namespace std;
 
char treeNode[26][3];
int key[26];
int N;
 
void preorder(int root) {
    //우선 root를 출력한다.
    cout << treeNode[root][0];
    //좌측 가지를 확인한다.
    if (treeNode[root][1!= '.')
        preorder(key[treeNode[root][1- 'A']);
    //우측 가지를 확인한다.
    if (treeNode[root][2!= '.')
        preorder(key[treeNode[root][2- 'A']);
}
 
void inorder(int root) {
    if (treeNode[root][1!= '.')
        inorder(key[treeNode[root][1- 'A']);
    cout << treeNode[root][0];
    if (treeNode[root][2!= '.')
        inorder(key[treeNode[root][2- 'A']);
}
void postorder(int root) {
    if (treeNode[root][1!= '.')
        postorder(key[treeNode[root][1- 'A']);
    if (treeNode[root][2!= '.')
        postorder(key[treeNode[root][2- 'A']);
    cout << treeNode[root][0];
}
 
int main() {
    
    char temp_root, temp_left, temp_right;
    cin >> N;
    for (int i = 0; i < N; i++) {
        for (int t = 0; t < 3; t++) {
            cin >> treeNode[i][t];
        }
        key[treeNode[i][0- 'A'= i;
    }
    preorder(0);
    cout << endl;
    inorder(0);
    cout << endl;
    postorder(0);
}
 
cs


 3. 참고




질문이나 지적 있으시면 댓글로 남겨주세요~

도움 되셨으면 하트 꾹!


+ Recent posts