반응형
https://www.acmicpc.net/problem/1991
참고
링크드 리스트를 이용하여 간단히 트리를 만들 수 있다.
노드에 포인터를 2개 사용하면 트리가 된다.
typedef struct st
{
char value;
struct st *left;
struct st *right;
}NODE;
NODE node['Z' + 1];
각 노드에 value를 해당 알파벳으로 설정한다.
for (int i = 'A'; i <= 'Z'; i++) node[i].value = i;
그리고 input에서 주어진 대로 node를 왼쪽과 오른쪽에 할당하면 된다.
for (int i = 0; i < N; i++)
{
char a, b, c;
scanf(" %c %c %c", &a, &b, &c);
if (b != '.') node[a].left = &node[b];
if (c != '.') node[a].right = &node[c];
}
순회 방법은 간단하다.
전위 순회는 노드를 먼저 출력하고 다시 전위 순회를 실행하고,
중위 순회는 중위 순회를 한번 실행하고 노드를 출력하고,
후위 순회는 후위 순회를 모두 실행하고 노드를 출력한다.
void preorder(NODE *nd) // 전위 순회
{
if (nd == NULL) return;
printf("%c", nd->value);
preorder(nd->left);
preorder(nd->right);
}
void inorder(NODE *nd) // 중위 순회
{
if (nd == NULL) return;
inorder(nd->left);
printf("%c", nd->value);
inorder(nd->right);
}
void postorder(NODE *nd) // 후위 순회
{
if (nd == NULL) return;
postorder(nd->left);
postorder(nd->right);
printf("%c", nd->value);
}
문제에서 루트 노드가 A라고 하였으므로 노드 A를 넣어주면 된다.
preorder(&node['A']);
putchar('\n');
inorder(&node['A']);
putchar('\n');
postorder(&node['A']);
putchar('\n');
전체 코드는 다음과 같다.
#include <stdio.h>
int N;
typedef struct st
{
char value;
struct st *left;
struct st *right;
}NODE;
NODE node['Z' + 1];
void preorder(NODE *nd) //전위 순회
{
if (nd == NULL) return;
printf("%c", nd->value);
preorder(nd->left);
preorder(nd->right);
}
void inorder(NODE *nd) //중위 순회
{
if (nd == NULL) return;
inorder(nd->left);
printf("%c", nd->value);
inorder(nd->right);
}
void postorder(NODE *nd) //후위 순회
{
if (nd == NULL) return;
postorder(nd->left);
postorder(nd->right);
printf("%c", nd->value);
}
int main(void)
{
scanf("%d", &N);
for (int i = 'A'; i <= 'Z'; i++) node[i].value = i;
for (int i = 0; i < N; i++)
{
char a, b, c;
scanf(" %c %c %c", &a, &b, &c);
if (b != '.') node[a].left = &node[b];
if (c != '.') node[a].right = &node[c];
}
preorder(&node['A']);
putchar('\n');
inorder(&node['A']);
putchar('\n');
postorder(&node['A']);
putchar('\n');
return 0;
}
반응형
'알고리즘 > BAEKJOON' 카테고리의 다른 글
BOJ 10757 : 큰 수 A+B (0) | 2023.07.29 |
---|---|
BOJ 7453 : 합이 0인 네 정수 (0) | 2023.04.07 |
BOJ 6593 : 상범 빌딩 (0) | 2023.03.26 |
BOJ 1504 : 특정한 최단 경로 (0) | 2023.03.25 |
BOJ 12899 : 데이터 구조 (0) | 2023.03.04 |
댓글