- 문제 링크 : boj.kr/1991
- 난이도 : S1
- 태그 : 트리, 재귀
코드
#include <bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
#define INF 0x7FFFFFFF
using namespace std;
using ll = long long;
using ld = long double;
using pii = pair<int,int>;
using pll = pair<ll, ll>;
void traversal(vector<pii> tree, int node, int mode) {
if(node == -19) return;
auto [l, r] = tree[node];
if(mode == -1) cout << (char)('A'+node);
traversal(tree, l, mode);
if(mode == 0) cout << (char)('A'+node);
traversal(tree, r, mode);
if(mode == 1) cout << (char)('A'+node);
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int n;
cin >> n;
vector<pii> tree(n);
for(int i = 0; i < n; i++) {
string a, b, c;
cin >> a >> b >> c;
tree[a[0]-'A'].first = b[0]-'A';
tree[a[0]-'A'].second = c[0]-'A';
}
traversal(tree, 0, -1);
cout << "\n";
traversal(tree, 0, 0);
cout << "\n";
traversal(tree, 0, 1);
cout << "\n";
return 0;
}
풀이
재귀식 순회 코드를 이용하면 전위, 중위, 후위 순회의 코드는 언제 노드를 출력할 것인가 에서만 차이가 나게 된다.
따라서 순회의 종류를 검사하여 출력하도록 하면 하나의 코드를 이용하여 세 가지의 순회 모두 구현할 수 있다.
728x90
'PS' 카테고리의 다른 글
BOJ 2777 : 숫자 놀이 (0) | 2025.02.21 |
---|---|
BOJ 6616 : 문자열 암호화 (1) | 2025.02.20 |
BOJ 9324 : 진짜 메시지 (0) | 2025.02.19 |
BOJ 1980 : 햄버거 사랑 (0) | 2025.02.17 |
BOJ 2090 : 조화평균 (1) | 2025.02.16 |