문제 링크입니다: https://www.acmicpc.net/problem/1991
자료구조 시간에 배운 트리 순회를 복습할 수 있는 문제였습니다.
#include <iostream>
#include <vector>
using namespace std;
const int MAX = 26;
vector<pair<int, bool>> tree[MAX]; //nodeNum, left?
void preOrder(int node)
{
cout << (char)(node + 'A');
for (int i = 0; i < tree[node].size(); i++)
preOrder(tree[node][i].first);
}
void inOrder(int node)
{
//자식이 존재하고 왼쪽 자식이라면
if (tree[node].size() && tree[node][0].second)
inOrder(tree[node][0].first);
cout << (char)(node + 'A');
//오른쪽 자식만 있다면
if (tree[node].size() && !tree[node][0].second)
inOrder(tree[node][0].first);
//양쪽 자식 다 있다면
else if (tree[node].size() == 2)
inOrder(tree[node][1].first);
}
void postOrder(int node)
{
for (int i = 0; i < tree[node].size(); i++)
postOrder(tree[node][i].first);
cout << (char)(node + 'A');
}
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
for (int i = 0; i < N; i++)
{
char a, b, c;
cin >> a >> b >> c;
//왼쪽 자식
if (b != '.')
tree[a - 'A'].push_back({ b - 'A', true });
//오른쪽 자식
if (c != '.')
tree[a - 'A'].push_back({ c - 'A', false });
}
preOrder(0);
cout << "\n";
inOrder(0);
cout << "\n";
postOrder(0);
cout << "\n";
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > BOJ' 카테고리의 다른 글
백준 11659번 구간 합 구하기 4, 백준 11441번 합 구하기 (0) | 2019.02.07 |
---|---|
백준 3109번 빵집 (0) | 2019.02.07 |
백준 10825번 국영수 (2) | 2019.02.06 |
백준 9613번 GCD 합 (2) | 2019.02.05 |
백준 11655번 ROT13 (0) | 2019.02.05 |