https://www.acmicpc.net/problem/1991
이진 트리를 입력받아 전위 순회(preorder traversal), 중위 순회(inorder traversal), 후위 순회(postorder traversal)한 결과를 출력하는 프로그램을 작성하시오.
예를 들어 위와 같은 이진 트리가 입력되면,
가 된다.
제출 25000 정답 비율 64%
#include <stdio.h>
#include <stdlib.h>
int N = 0;
struct tree {
char left, right;
};
struct tree arr[50];
void front(char root) {
//전위: 루트-왼-오
if (root == '.')
return;
printf("%c", root);
front(arr[root].left);
front(arr[root].right);
}
void mid(char root) {
//중위: 왼-루트-오
if (root == '.')
return;
mid(arr[root].left);
printf("%c", root);
mid(arr[root].right);
}
void back(char root) {
//후위: 왼-오-루트
if (root == '.')
return;
back(arr[root].left);
back(arr[root].right);
printf("%c", root);
}
void main() {
scanf("%d", N);
char a, b, c;
for (int i = 0; i < N; i++) {
scanf("%c %c %c", &a, &b, &c);
arr[a].left = b; arr[a].right = c;
}
front('A'); printf("\n");
mid('A'); printf("\n");
back('A'); printf("\n");
}