
이진 트리를 입력받아 전위,중위,후위 순회한 결과를 출력하는 프로그램을 만드시오
첫째 줄에는 트리의 노드의 개수 N(1이상 26이하)
둘째 줄부터 N개의 줄에 걸쳐 각 노드와 해당 노드의 왼쪽 자식, 오른쪽 자식이 주어진다.
노드의 이름은 A부터 차례대로 알파벳 대문자로 매겨지며, 항상 A가 루트 노드가 된다.
자식 노드가 없는 경우 .으로 표시한다.
전위,중위,후위 순회한 결과를 차례대로 출력한다.
int[][] arr = new int[27][2];arr['B'-'A'+1][0] = 'E'-'A'+1, arr['B'-'A'][1] = 'G'-'A'+1이다. 만약, 자식 노드가 없어 .이 입력된다면 값을 0으로 저장한다.현재노드 출력 - 왼쪽 자식 재귀호출 - 오른쪽 자식 재귀호출 순서로 진행된다.private static void preOrder(int node) {
if(node == 0) {
return;
}
System.out.print((char)(node+'A'-1));
preOrder(arr[node][0]);
preOrder(arr[node][1]);
}
왼쪽 자식 재귀호출 - 현재노드 출력 - 오른쪽 자식 재귀호출 순서로 진행된다.private static void inOrder(int node) {
if(node == 0) {
return;
}
inOrder(arr[node][0]);
System.out.print((char)(node+'A'-1));
inOrder(arr[node][1]);
}
왼쪽 자식 재귀호출 - 오른쪽 자식 재귀호출 - 현재노드 출력 순서로 진행된다.private static void postOrder(int node) {
if(node == 0) {
return;
}
postOrder(arr[node][0]);
postOrder(arr[node][1]);
System.out.print((char)(node+'A'-1));
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
private static int[][] arr;
private static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
arr = new int[27][2];
char value;
char leftNode;
char rightNode;
for (int i = 1; i <= N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
value = st.nextToken().charAt(0);
leftNode = st.nextToken().charAt(0);
rightNode = st.nextToken().charAt(0);
if (leftNode != '.') {
arr[value - 'A'+1][0] = leftNode - 'A'+1;
}
if (rightNode != '.') {
arr[value - 'A'+1][1] = rightNode - 'A'+1;
}
}
preOrder(1);
sb.append("\n");
inOrder(1);
sb.append("\n");
postOrder(1);
System.out.println(sb);
}
private static void preOrder(int node) {
if (node == 0) {
return;
}
sb.append((char) (node + 'A' - 1));
preOrder(arr[node][0]);
preOrder(arr[node][1]);
}
private static void inOrder(int node) {
if (node == 0) {
return;
}
inOrder(arr[node][0]);
sb.append((char) (node + 'A' - 1));
inOrder(arr[node][1]);
}
private static void postOrder(int node) {
if (node == 0) {
return;
}
postOrder(arr[node][0]);
postOrder(arr[node][1]);
sb.append((char) (node + 'A' - 1));
}
}
