1991번: 트리 순회
첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파
www.acmicpc.net
> 의식의 흐름
> 풀이 과정
> 코드
import java.io.*;
import java.util.StringTokenizer;
public class Main {
public static int N; // 노드의 개수
public static Node[] nodes;
public static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public static class Node{
char left;
char right;
public Node(char left, char right){
this.left = left;
this.right = right;
}
}
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
nodes = new Node[N];
for(int i=0;i<N;i++){
StringTokenizer st = new StringTokenizer(br.readLine());
nodes[st.nextToken().charAt(0)-'A'] = new Node(st.nextToken().charAt(0), st.nextToken().charAt(0));
}
preorder('A'); // 전위 순회
bw.write("\n");
inorder('A'); // 중위 순회
bw.write("\n");
postOrder('A'); // 후위 순회
bw.flush();
br.close();
bw.close();
}
public static void preorder(char alphabet) throws Exception {
Node now = nodes[alphabet-'A'];
bw.write(Character.toString(alphabet));
if(now.left != '.')
preorder(now.left);
if(now.right != '.')
preorder(now.right);
}
public static void inorder(char alphabet) throws Exception {
Node now = nodes[alphabet-'A'];
if(now.left != '.')
inorder(now.left);
bw.write(Character.toString(alphabet));
if(now.right != '.')
inorder(now.right);
}
public static void postOrder(char alphabet) throws Exception {
Node now = nodes[alphabet-'A'];
if(now.left != '.')
postOrder(now.left);
if(now.right != '.')
postOrder(now.right);
bw.write(Character.toString(alphabet));
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[JAVA] 백준 q1541 - 잃어버린 괄호 (2) | 2023.10.10 |
---|---|
[JAVA] 백준 q5639 - 이진 검색 트리 (0) | 2023.10.04 |
[JAVA] 백준 q11725 - 트리의 부모 찾기 (0) | 2023.09.21 |
[JAVA] 백준 q14675 - 단절점과 단절선 (0) | 2023.09.19 |
[JAVA] 백준 q7662 - 이중 우선순위 큐 (0) | 2023.09.15 |