하...

내 자신이 너무 바보같다.


이문제 이렇게 어려운 문제인가요??? ㅠㅠ 3시간은 잡고 있었네 ㅠㅠ

정답인데 더 좋은 방법없을까요?

알고리즘 고수형님들 저의 허접한 소스코드 좀 보시고 많은 지적 좀 부탁드립니다.


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
88
89
90
91
#include <iostream>
#define SIZE 1001
using namespace std;
 
typedef struct tree * TreePtr;
typedef struct tree
{
    char data;
    TreePtr left;
    TreePtr right;
}Tree;
 
TreePtr LevelSearch(TreePtr mPtr, char mData)
{
    TreePtr Queue[SIZE];
    int REAR = 0, FRONT = 0;
    
    Queue[REAR] = mPtr;
    REAR = (REAR + 1) % SIZE;
 
    while (REAR != FRONT)
    {
        mPtr = Queue[FRONT];
        FRONT = (FRONT + 1) % SIZE;
        if (mPtr->data == mData) { return mPtr; }
 
        if (mPtr->left) { Queue[REAR] = mPtr->left; REAR = (REAR + 1) % SIZE; }
        if (mPtr->right) { Queue[REAR] = mPtr->right; REAR = (REAR + 1) % SIZE; }
    }
 
    return NULL;
}
 
void Inorder(TreePtr mPtr)
{
    if (mPtr)
    {
        Inorder(mPtr->left);
        cout << mPtr->data;
        Inorder(mPtr->right);
    }
}
 
void Postorder(TreePtr mPtr)
{
    if (mPtr)
    {
        Postorder(mPtr->left);
        Postorder(mPtr->right);
        cout << mPtr->data;
    }
}
 
void Preorder(TreePtr mPtr)
{
    if (mPtr)
    {
        cout << mPtr->data;
        Preorder(mPtr->left);
        Preorder(mPtr->right);
    }
}
 
int main(void)
{
    int mNum = 0;
    cin >> mNum;
 
    TreePtr Node = new Tree{'A', NULL, NULL};
    TreePtr Root = Node;
 
    char mChar[] = {NULL, NULL, NULL};
    for (int count = 0; count < mNum; count++)
    {
        cin >> mChar[0>> mChar[1>> mChar[2];
 
        TreePtr mTemp = LevelSearch(Root, mChar[0]);
        if (mTemp)
        {
            Node = mTemp;
            if (mChar[1!= '.') { Node->left = new Tree{ mChar[1], NULL, NULL }; }
            if (mChar[2!= '.') { Node->right = new Tree{ mChar[2], NULL, NULL }; }
        }
    }
 
    Preorder(Root); cout << endl;
    Inorder(Root); cout << endl;
    Postorder(Root); cout << endl;
 
    return 0;
}
cs