1) 문제
- https://www.acmicpc.net/problem/1991
- 이진 트리를 입력받아 전위 순회(preorder traversal), 중위 순회(inorder traversal), 후위 순회(postorder traversal)한 결과를 출력하는 프로그램을 작성하시오.
2) 풀이
- inorder, preorder, postorder 구현.
3) 코딩
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class BOJ_1991_트리_순회 {
static final int MAX_NODE_NUMBER = 26;
static class Node {
int left, right;
Node(int left, int right) {
this.left = left;
this.right = right;
}
}
public static void main(String[] args) throws IOException {
Node[] nodes = new Node[MAX_NODE_NUMBER + 1];
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(in.readLine());
while (n-- > 0) {
StringTokenizer st = new StringTokenizer(in.readLine(), " ");
int x = st.nextToken().charAt(0) - 'A';
char y = st.nextToken().charAt(0);
char z = st.nextToken().charAt(0);
int left = -1;
int right = -1;
if (y != '.') left = y - 'A';
if (z != '.') right = z - 'A';
nodes[x] = new Node(left, right);
}
preorder(nodes, 0);
System.out.println();
inorder(nodes, 0);
System.out.println();
postorder(nodes, 0);
System.out.println();
}
private static void postorder(Node[] nodes, int x) {
if (x == -1) return;
postorder(nodes, nodes[x].left);
postorder(nodes, nodes[x].right);
System.out.print((char)(x + 'A'));
}
private static void inorder(Node[] nodes, int x) {
if (x == -1) return;
inorder(nodes, nodes[x].left);
System.out.print((char)(x + 'A'));
inorder(nodes, nodes[x].right);
}
private static void preorder(Node[] nodes, int x) {
if (x == -1) return;
System.out.print((char)(x + 'A'));
preorder(nodes, nodes[x].left);
preorder(nodes, nodes[x].right);
}
}