백준 1991 트리 순회 (C++)

안유태·2022년 10월 5일
0

알고리즘

목록 보기
51/239

1991번: 트리 순회

기본적인 트리 순회 문제이다. 전위, 중위, 후위 순회 결과를 순서대로 출력하면 된다. 먼저 입력받은 노드들을 숫자로 바꿔 node배열에 저장하였다. 순회는 재귀를 사용했으며 각 함수의 구조는 동일하지만 출력하는 위치가 다르다.
오랜만에 본 순회 문제여서 잘 생각이나지 않았다. 잘 기억해두자.



#include <iostream>
#include <vector>

using namespace std;

int N;
int node[26][2];

void preOrder(int n) {
    if (n == -1) return;

    cout << (char)(n + 'A');
    preOrder(node[n][0]);
    preOrder(node[n][1]);
}

void inOrder(int n) {
    if (n == -1) return;

    inOrder(node[n][0]);
    cout << (char)(n + 'A');
    inOrder(node[n][1]);
}

void postOrder(int n) {
    if (n == -1) return;

    postOrder(node[n][0]);
    postOrder(node[n][1]);
    cout << (char)(n + 'A');
}

void solution() {
    preOrder(0);
    cout << "\n";
    inOrder(0);
    cout << "\n";
    postOrder(0);
}

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

    cin >> N;
    
    for (int i = 0; i < N; i++) {
        char a, b, c;
        cin >> a >> b >> c;
        a -= 'A';
        b -= 'A';
        c -= 'A';

        if (b < 0) b = -1;
        if (c < 0) c = -1;

        node[a][0] = b;
        node[a][1] = c;
    }

    solution();

    return 0;
}
profile
공부하는 개발자

0개의 댓글