주어진 트리를 중위 순회했을 경우, 만들어지는 단어 출력
ex: SOFTWARE
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class SWEA_1231 {
static StringBuilder sb = new StringBuilder();
static char[] tree;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int testCase = 11;
int n,n1, tmp, idx, cnt;
String[] str;
for(int tc = 1; tc < testCase; tc++){
//출력 포맷
sb.append('#').append(tc).append(" ");
// 트리의 노드 수 입력받기
n = Integer.parseInt(br.readLine());
n1 = n + 1;
// 트리를 저장할 배열
tree = new char[n1];
//트리 입력받기
for(int i = 1; i < n1; i++) {
str = br.readLine().split(" ");
tmp = Integer.parseInt(str[0]);
// 해당 노드의 위치에 char 저장
tree[tmp] = str[1].charAt(0);
}
// 중위순회 - 재귀를 통해 구현
inorder(1, n1);
sb.append('\n');
}
System.out.println(sb);
}
//중위순회 : 왼쪽 노드 먼저 방문 -> 출력 -> 오른쪾 노드 방문
private static void inorder(int idx, int n) {
if(idx * 2 < n) {
inorder(idx*2, n);
}
sb.append(tree[idx]);
if(idx * 2 + 1 < n) {
inorder(idx * 2 + 1, n);
}
}
}