[Baekjoon] 1991번: 트리 순회
2023. 5. 12. 00:07ㆍComputer Sciences/Problem Solve
https://www.acmicpc.net/problem/1991
문제 설명
주어진 이진 트리를 전위, 중위, 후위 순회한 결과를 출력하면 된다. 별다르게 어려울 건 없다. 이진 트리와 순회 방식만 알면 쉽게 풀 수 있다.
이진 트리의 순회는 다음 방식과 같다.
- 전위 순회한 결과 : ABDCEFG // (루트) (왼쪽 자식) (오른쪽 자식)
- 중위 순회한 결과 : DBAECFG // (왼쪽 자식) (루트) (오른쪽 자식)
- 후위 순회한 결과 : DBEGFCA // (왼쪽 자식) (오른쪽 자식) (루트)
풀이 방법
import java.util.*;
import java.io.*;
class Main {
static class Node {
char name;
Node left;
Node right;
public Node(char name) {
this.name = name;
}
}
static Node[] tree;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
tree = new Node[N];
for (int i = 0; i < N; i++) {
tree[i] = new Node((char)('A' + i));
}
for (int i = 0; i < N; i++) {
char[] chars = br.readLine().toCharArray();
char parent = chars[0];
char left = chars[2];
char right = chars[4];
if (left != '.') {
tree[parent - 'A'].left = tree[left - 'A'];
}
if (right != '.') {
tree[parent - 'A'].right = tree[right - 'A'];
}
}
traversalPreorder(tree[0]);
System.out.println();
traversalInorder(tree[0]);
System.out.println();
traversalPostorder(tree[0]);
System.out.println();
}
private static void traversalPreorder(Node node) {
if (node != null) {
System.out.print(node.name);
traversalPreorder(node.left);
traversalPreorder(node.right);
}
}
private static void traversalInorder(Node node) {
if (node != null) {
traversalInorder(node.left);
System.out.print(node.name);
traversalInorder(node.right);
}
}
private static void traversalPostorder(Node node) {
if (node != null) {
traversalPostorder(node.left);
traversalPostorder(node.right);
System.out.print(node.name);
}
}
}
'Computer Sciences > Problem Solve' 카테고리의 다른 글
[Baekjoon] 2193번: 이친수 (0) | 2023.05.20 |
---|---|
[Baekjoon] 9657번: 돌 게임 3 (0) | 2023.05.12 |
[Baekjoon] 1912번: 연속합 (2) | 2023.05.10 |
[Programmers] 택배 배달과 수거하기 (0) | 2023.05.02 |
[Programmers] 미로 탈출 (0) | 2023.05.01 |