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;
}