[C++]백준1991번 트리 순회
문제는 다음과 같다.
오늘은 백준1991번 트리 순회 문제를 풀어보도록 하자.
자료구조 때 배운 트리를 구현해보는 것이다. 재귀를 이용하면 되고 .이 나왔을 때는 -1, 그 나머지는 ASCII Code 변환 값을 넣어주었다.
그리고 preorder, inorder, postorder를 구현해주었다.
[코드]
#include <iostream>
#include <vector>
using namespace std;
int N;
char node_1, node_2, node_3;
vector<int>v[26];
void preorder(int idx) {
cout << char(idx + 'A');
for (int i = 0; i < v[idx].size(); i++) {
if (v[idx][i] != -1) {
preorder(v[idx][i]);
}
}
}
void inorder(int idx) {
if (v[idx][0] != -1 && v[idx][1] != -1) {
inorder(v[idx][0]);
cout << char(idx + 'A');
inorder(v[idx][1]);
}
if (v[idx][0] != -1 && v[idx][1] == -1) {
inorder(v[idx][0]);
cout << char(idx + 'A');
}
if (v[idx][0] == -1 && v[idx][1] != -1) {
cout << char(idx + 'A');
inorder(v[idx][1]);
}
if (v[idx][0] == -1 && v[idx][1] == -1) {
cout << char(idx + 'A');
}
}
void postorder(int idx) {
for (int i = 0; i < v[idx].size(); i++) {
if (v[idx][i] != -1) {
postorder(v[idx][i]);
}
}
cout << char(idx + 'A');
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> N;
for (int i = 0; i < N; i++) {
cin >> node_1 >> node_2 >> node_3;
if (node_2 != '.') {
v[node_1 - 'A'].push_back(node_2 - 'A');
}
else {
v[node_1 - 'A'].push_back(-1);
}
if (node_3 != '.') {
v[node_1 - 'A'].push_back(node_3 - 'A');
}
else {
v[node_1 - 'A'].push_back(-1);
}
}
preorder(0);
cout << '\n';
inorder(0);
cout << '\n';
postorder(0);
cout << '\n';
}