이번에 풀어본 문제는
백준 1991번 트리 순회 입니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int [][] 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 int[N + 1][2];
StringTokenizer st;
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
int pIdx = st.nextToken().charAt(0) - 64;
int left = st.nextToken().charAt(0) - 64;
int right = st.nextToken().charAt(0) - 64;
if (left > 0) {
tree[pIdx][0] = left;
}
if (right > 0) {
tree[pIdx][1] = right;
}
}
StringBuilder sb = new StringBuilder();
preOrder(sb, 1);
sb.append("\n");
inOrder(sb, 1);
sb.append("\n");
postOrder(sb, 1);
System.out.print(sb);
}
static void preOrder(StringBuilder sb, int p) {
sb.append(((char)(p + 64)));
if (tree[p][0] > 0) preOrder(sb, tree[p][0]);
if (tree[p][1] > 0) preOrder(sb, tree[p][1]);
}
static void inOrder(StringBuilder sb, int p) {
if (tree[p][0] > 0) inOrder(sb, tree[p][0]);
sb.append(((char)(p + 64)));
if (tree[p][1] > 0) inOrder(sb, tree[p][1]);
}
static void postOrder(StringBuilder sb, int p) {
if (tree[p][0] > 0) postOrder(sb, tree[p][0]);
if (tree[p][1] > 0) postOrder(sb, tree[p][1]);
sb.append(((char)(p + 64)));
}
}
트리의 전위, 중위, 후위 순회를 출력하는 문제입니다.
주어진 입력으로 트리를 완성하고, 조건에 맞게 재귀 및 출력 해주면 해결할 수 있습니다.