기본적인 트리 순회 문제이다. 전위, 중위, 후위 순회 결과를 순서대로 출력하면 된다. 먼저 입력받은 노드들을 숫자로 바꿔 node
배열에 저장하였다. 순회는 재귀를 사용했으며 각 함수의 구조는 동일하지만 출력하는 위치가 다르다.
오랜만에 본 순회 문제여서 잘 생각이나지 않았다. 잘 기억해두자.
#include <iostream>
#include <vector>
using namespace std;
int N;
int node[26][2];
void preOrder(int n) {
if (n == -1) return;
cout << (char)(n + 'A');
preOrder(node[n][0]);
preOrder(node[n][1]);
}
void inOrder(int n) {
if (n == -1) return;
inOrder(node[n][0]);
cout << (char)(n + 'A');
inOrder(node[n][1]);
}
void postOrder(int n) {
if (n == -1) return;
postOrder(node[n][0]);
postOrder(node[n][1]);
cout << (char)(n + 'A');
}
void solution() {
preOrder(0);
cout << "\n";
inOrder(0);
cout << "\n";
postOrder(0);
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> N;
for (int i = 0; i < N; i++) {
char a, b, c;
cin >> a >> b >> c;
a -= 'A';
b -= 'A';
c -= 'A';
if (b < 0) b = -1;
if (c < 0) c = -1;
node[a][0] = b;
node[a][1] = c;
}
solution();
return 0;
}