이진 트리를 입력받아 전위,중위,후위 순회한 결과를 출력하는 프로그램을 만드시오
첫째 줄에는 트리의 노드의 개수 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));
}
}