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

xyzw·2025년 3월 14일
0

algorithm

목록 보기
50/61

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

풀이

트리의 전위 순회(preorder traversal), 중위 순회(inorder traversal), 후위 순회(postorder traversal)를 연습하는 문제였다.

재귀함수를 이용하여 탐색하였다.

코드

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

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

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

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

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

int main()
{
    int n;
    char parent, left, right;
    
    cin >> n;
    while(n--) {
        cin >> parent >> left >> right;
        tree[parent] = {left, right};
    }
    
    preorder('A');
    cout << "\n";
    inorder('A');
    cout << "\n";
    postorder('A');
    
    return 0;
}

0개의 댓글