티스토리 뷰

문제

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

풀이과정

기본적인 트리의 순회과정 구현을 묻는 문제다.

전위 순회(preorder)는 root->left->right
중위 순회(inorder)는 left->root->right
후위 순회(postorder)는 left->right->root

어떻게 구현을 해야할지 조금만 생각해보면 쉽게 풀 수 있는 문제다. 문제에서 입력되는 트리는 자식을 최대 2개로 가지는 이진 트리이므로 배열로 트리를 표현할 수 있다. a[26][2] 라는 배열을 선언하여 각 알파벳을 부모노드로 가지는 자식을 저장하면 된다. 각 순회의 구현은 재귀호출을 통해 구현하였다.

소스코드

#include <iostream>

using namespace std;

int a[26][2];
int N;

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

    cout << char(node + 'A');
    preorder(a[node][0]);
    preorder(a[node][1]);
}

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

    inorder(a[node][0]);
    cout << char(node + 'A');
    inorder(a[node][1]);
}

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

    postorder(a[node][0]);
    postorder(a[node][1]);
    cout << char(node + 'A');
}

int main()
{
    ios::sync_with_stdio(false);

    cin >> N;

    for (int i = 0; i < N; i++)
    {
        char root, left, right;

        cin >> root >> left >> right;

        a[root - 'A'][0] = left != '.' ? left-'A' : -1;
        a[root - 'A'][1] = right != '.'? right-'A' : -1;
    }

    preorder(0);
    cout << "\n";
    inorder(0);
    cout << "\n";
    postorder(0);
    cout << "\n";

    return 0;
}

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

[백준] 1167번 트리의 지름  (0) 2018.02.11
[백준] 11725번 트리의 부모 찾기  (0) 2018.02.11
[백준] 2146번 다리 만들기  (0) 2018.02.08
[백준] 7576번 토마토  (0) 2018.02.07
[백준] 2178번 미로 탐색  (0) 2018.02.05
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함