Problem Solving/Baekjoon

[Baekjoon] 1991 트리순회 (C++ 풀이)

kar7mp5 2024. 6. 4. 20:38
728x90

 

문제 링크:

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

 

Tree에서 0번 index는 left child를 1번 index에는 right child로 두고 순회를 진행했다. 

#include <iostream>
using namespace std;

int N;
char MAP[27][2];

void preorder(int N) {
    if (N == -1)
        return;

    cout << (char)(N + 'A');
    preorder(MAP[N][0]);
    preorder(MAP[N][1]);
}

void inorder(int N) {
    if (N == -1)
        return;

    inorder(MAP[N][0]);
    cout << (char)(N + 'A');
    inorder(MAP[N][1]);
}

void postorder(int N) {
    if (N == -1)
        return;

    postorder(MAP[N][0]);
    postorder(MAP[N][1]);
    cout << (char)(N + 'A');
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    cin >> N;

    char parent, left, right;
    while (N--) {
        cin >> parent >> left >> right;
        int pIdx = parent - 'A';
        // left node
        if (left == '.')
            MAP[pIdx][0] = -1;
        else
            MAP[pIdx][0] = left - 'A';

        // right node
        if (right == '.')
            MAP[pIdx][1] = -1;
        else
            MAP[pIdx][1] = right - 'A';
    }
    preorder(0);
    cout << '\n';
    inorder(0);
    cout << '\n';
    postorder(0);

    return 0;
}
728x90