문제링크 : https://www.acmicpc.net/problem/1991
이 문제는, 한 노드가 주어지면 트리 관계에 맞게 연결해주어야 하는 문제다.
적어도 나는 위처럼 생각하여 일일히 연결했었는데,
풀고나서 다른 분들의 코드를 보니 그냥 연결은 안해주고, 방향지시만 해줬다.
다시말하면, 굳이 내 코드처럼 일일히 하나하나 연결해 줄 필요는 없었던 문제였다.
소스코드 :
이 문제는, 한 노드가 주어지면 트리 관계에 맞게 연결해주어야 하는 문제다.
적어도 나는 위처럼 생각하여 일일히 연결했었는데,
풀고나서 다른 분들의 코드를 보니 그냥 연결은 안해주고, 방향지시만 해줬다.
다시말하면, 굳이 내 코드처럼 일일히 하나하나 연결해 줄 필요는 없었던 문제였다.
소스코드 :
| 
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 | 
#include <iostream> 
#include <vector> 
#include <algorithm> 
using namespace std; 
class Node { 
public: 
    char data; 
    Node* left; 
    Node* right; 
}; 
void PreOrder(Node* node) { 
    if (node == NULL) 
        return; 
    cout << node->data; 
    PreOrder(node->left); 
    PreOrder(node->right); 
} 
void InOrder(Node* node) { 
    if (node == NULL) 
        return; 
    InOrder(node->left); 
    cout << node->data; 
    InOrder(node->right); 
} 
void PostOrder(Node* node) { 
    if (node == NULL) 
        return; 
    PostOrder(node->left); 
    PostOrder(node->right); 
    cout << node->data; 
} 
int main() { 
    int n; 
    cin >> n; 
    vector<Node*> v(n); 
    for (int i = 0; i < n; i++) { 
        Node *tmp = new Node; 
        tmp->data = (char)(i + 65); 
        tmp->left = NULL; 
        tmp->right = NULL; 
        v[i] = tmp; 
    } 
    for (int i = 0; i < n; i++) { 
        cin.ignore(); 
        char a, b, c; 
        cin >> a >> b >> c; 
        if(b != '.') 
            v[(int)a - 65]->left = v[(int)b - 65]; 
        if (c != '.') 
            v[(int)a - 65]->right = v[(int)c - 65]; 
        for (int t = 0; t < i; t++) { 
            if (v[t]->left == v[(int)a - 65]) { 
                v[t]->left->left = v[(int)a - 65]->left; 
                v[t]->left->right = v[(int)a - 65]->right; 
                break; 
            } 
            else if (v[t]->right == v[(int)a - 65]) { 
                v[t]->right->left = v[(int)a - 65]->left; 
                v[t]->right->right = v[(int)a - 65]->right; 
                break; 
            } 
        } 
    } 
    PreOrder(v[0]); 
    cout << endl; 
    InOrder(v[0]); 
    cout << endl; 
    PostOrder(v[0]); 
} | cs | 
댓글
댓글 쓰기