import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
Node root = new Node("A",null,null);
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
String value = st.nextToken();
String left = st.nextToken();
String right = st.nextToken();
insert(root, value,left,right);
}
preOrder(root);
System.out.println();
inOrder(root);
System.out.println();
postOrder(root);
}
private static void preOrder(Node cur) {
if (cur == null)
return;
System.out.print(cur.value);
preOrder(cur.left);
preOrder(cur.right);
}
private static void inOrder(Node cur) {
if (cur == null)
return;
inOrder(cur.left);
System.out.print(cur.value);
inOrder(cur.right);
}
private static void postOrder(Node cur) {
if (cur == null)
return;
postOrder(cur.left);
postOrder(cur.right);
System.out.print(cur.value);
}
static void insert(Node current, String value, String left, String right) {
if (current.value.equals(value)) {
current.left = left.equals(".") ? null : new Node(left,null,null);
current.right = right.equals(".") ? null : new Node(right,null,null);
} else {
if (current.left != null)
insert(current.left,value,left,right);
if (current.right != null)
insert(current.right,value,left,right);
}
}
static class Node {
public String value;
public Node left;
public Node right;
public Node(String value, Node left, Node right) {
this.value = value;
this.left = left;
this.right = right;
}
}
}
🫡트리순회에 관한 문제입니다. 재귀에 대한 이해가 필요한 문제로 트리에 문제 그대로
전위 순회한 결과 : (루트) (왼쪽 자식) (오른쪽 자식)
중위 순회한 결과 : (왼쪽 자식) (루트) (오른쪽 자식)
후위 순회한 결과 : (왼쪽 자식) (오른쪽 자식) (루트)위 방식대로만 구현을 한다면 답을 찾을 수 있습니다.
출처 : 백준 - 트리순회