본문 바로가기

알고리즘/BOJ

1991번

1991번 - 트리 순회


풀면서 좀 헷갈렸다.......


그리고 입력이 뭐 3개면 A,B,C 이렇게 다 들어오긴 하지만 그게 순서로 들어오는게 아니라 B,C,A 이런식으로 들어올 수도 있다는 점을 간과해서 풀다가


오류가 발생했었다.


내가 푼 방식이 조금 이상하고 그럴 수도 있지만...


아무튼 나는 최대 N이 26으로 작은 값이므로 배열을 생성했고,


알파벳을 숫자로 변환해서 배열의 인덱스로 사용하였다.


전위 순회은 dfs1() 함수로


중위 순회은 dfs2() 함수로


후위 순회은 dfs3() 함수로 구현하였다.


처음에 dfs2() 함수에서 dfs1() 함수를 재귀로 호출하는 멍청한 짓도 하였는데, 이는 가끔 발생하는 잔실수인 것 같다. 조심할 것.


전위 순회, 중위 순회, 후위 순회는 결국 어떤 것이 먼저 호출되느냐의 문제인 것 같다..


처음에 굉장히 헷갈렸다... 지금도 헷갈릴 것 같다..


<정답 코드>


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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include<iostream>
#include<string.h>
using namespace std;
int N;
char node[27];
char leftChild[27];
char rightChild[27];
void dfs1(int p)
{
    cout << node[p];
 
    if (leftChild[p] != '.')
    {
        dfs1(leftChild[p] - 'A');
    }
 
    if (rightChild[p] != '.')
    {
        dfs1(rightChild[p] - 'A');
    }
    
 
    return;
    
}
void dfs2(int p)
{
 
    if (leftChild[p] != '.')
    {
        dfs2(leftChild[p] - 'A');
    }
    cout << node[p];
 
    if (rightChild[p] != '.')
    {
        dfs2(rightChild[p] - 'A');
    }
    
    
 
    return;
}
void dfs3(int p)
{
    if (leftChild[p] != '.')
    {
        dfs3(leftChild[p] - 'A');
    }
    if (rightChild[p] != '.')
    {
        dfs3(rightChild[p] - 'A');
    }
    cout << node[p];
    
 
    return;
    
}
int main()
{
    //freopen("input.txt", "r", stdin);
    cin >> N;
 
    memset(node, '.'sizeof(node));
    memset(leftChild, '.'sizeof(leftChild));
    memset(rightChild, '.'sizeof(rightChild));
 
    for (int i = 0; i < N; i++)
    {
        char tmp;
        cin >> tmp;
        node[tmp - 'A'= tmp;
        cin>> leftChild[tmp - 'A'>> rightChild[tmp - 'A'];
    }
 
    
 
    dfs1(0);
    cout << endl;
    dfs2(0);
    cout << endl;
    dfs3(0);
    cout << endl;
 
    return 0;
}
cs


반응형

'알고리즘 > BOJ' 카테고리의 다른 글

1167번  (0) 2017.11.23
11725번  (0) 2017.11.23
2146번  (0) 2017.11.23
2178번  (0) 2017.11.23
7576번  (0) 2017.11.23