Programing

[C++][백준 1991] 트리 순회

hye3193 2025. 1. 23. 11:59

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

풀이

일반적인 방법으로 포인터를 이용한 구조체로 이진 트리를 구현할 수도 있지만

C++에서 map을 이용해 트리를 구현하는 더 간단한 방법도 있다

 

제출 코드

#include <iostream>
#include <map>
using namespace std;

map<char, pair<char, char>> tree;

void preorder(char node)
{
    cout << node;
    if (tree[node].first != '.')
        preorder(tree[node].first);
    if (tree[node].second != '.')
        preorder(tree[node].second);
}

void inorder(char node)
{
    if (tree[node].first != '.')
        inorder(tree[node].first);
    cout << node;
    if (tree[node].second != '.')
        inorder(tree[node].second);
}

void postorder(char node)
{
    if (tree[node].first != '.')
        postorder(tree[node].first);
    if (tree[node].second != '.')
        postorder(tree[node].second);
    cout << node;
}

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

    int n;
    cin >> n;
    char node;
    while(n--)
    {
        cin >> node;
        cin >> tree[node].first >> tree[node].second;
    }

    preorder('A');
    cout << '\n';
    inorder('A');
    cout << '\n';
    postorder('A');
}