import java.io.*;
import java.util.*;
public class Main {
static class Node{
char data;
Node left;
Node right;
Node(char data){
this.data = data;
}
}
static int N;
static Node[] arr;
public static void main(String[] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
N = Integer.parseInt(br.readLine());
// 노드의 배열 생성
arr = new Node[N];
// N개의 노드를 만듦
for(int i=0;i<N;i++) arr[i] = new Node((char)('A'+i));
for(int i=0;i<N;i++) {
st = new StringTokenizer(br.readLine()," ");
char parent = st.nextToken().charAt(0);
char left = st.nextToken().charAt(0);
char right = st.nextToken().charAt(0);
// 입력된 값이 .이 아니면 왼쪽이나 오른쪽에 붙임
if(left!='.') arr[parent-'A'].left = arr[left-'A'];
if(right!='.') arr[parent-'A'].right = arr[right-'A'];
}
StringBuilder sb = new StringBuilder();
sb.append(preorder(arr[0])).append('\n');
sb.append(inorder(arr[0])).append('\n');
sb.append(postorder(arr[0])).append('\n');
System.out.println(sb);
}
// preorder는 부모 -> 왼쪽 -> 오른쪽
static String preorder(Node node) {
String str = "";
str += node.data;
if(node.left!=null) str += preorder(node.left);
if(node.right!=null) str += preorder(node.right);
return str;
}
// inorder 왼쪽 -> 부모 -> 오른쪽
static String inorder(Node node) {
String str = "";
if(node.left!=null) str += inorder(node.left);
str += node.data;
if(node.right!=null) str += inorder(node.right);
return str;
}
// preorder 왼쪽 -> 오른쪽 -> 부모
static String postorder(Node node) {
String str = "";
if(node.left!=null) str += postorder(node.left);
if(node.right!=null) str += postorder(node.right);
str += node.data;
return str;
}
}
'[BOJ] - JAVA' 카테고리의 다른 글
[백준] 1967 : 트리의 지름 JAVA 풀이 (0) | 2022.10.21 |
---|---|
[백준] 11725 : 트리의 부모 찾기 JAVA 풀이 (0) | 2022.10.20 |
[백준] 2146 : 다리 만들기 JAVA 풀이 (0) | 2022.10.20 |
[백준] 2178 : 미로 탐색 JAVA 풀이 (1) | 2022.10.14 |
[백준] 7569 : 토마토 JAVA 풀이 (1) | 2022.10.14 |