문제
https://www.acmicpc.net/problem/1991
1991번: 트리 순회
첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파
www.acmicpc.net
풀이
알파벳 순서대로 노드의 이름이 매겨지므로 노드의 개수 N 크기의 Node 배열을 만들고, A 노드부터 인덱스 순서대로 Node를 생성한다. 입력에 따라 왼쪽, 오른쪽 자식 노드를 연결하고 전위, 중위, 후위 순회한 결과를 각각 출력한다. order 함수 하나만으로 전위, 중위, 후위 순회 결과를 한 번에 호출할 수도 있다.
코드
import java.util.*;
import java.io.*;
class Node {
char value;
Node left;
Node right;
Node(char value) {
this.value = value;
}
}
public class Main {
static StringBuffer br, br_pre, br_in, br_post;
public static void main(String args[]) throws Exception {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(in.readLine());
Node[] arr = new Node[N];
for (int i = 0; i < N; i++)
arr[i] = new Node((char)('A' + i));
for (int i = 0; i < N; i++) {
String str = in.readLine();
arr[str.charAt(0) - 'A'].left = str.charAt(2) == '.' ? null : arr[str.charAt(2) - 'A'];
arr[str.charAt(0) - 'A'].right = str.charAt(4) == '.' ? null : arr[str.charAt(4) - 'A'];
}
br = new StringBuffer();
preOrder(arr[0]);
br.append("\n");
inOrder(arr[0]);
br.append("\n");
postOrder(arr[0]);
br.append("\n");
System.out.println(br);
// br_pre = new StringBuffer();
// br_in = new StringBuffer();
// br_post = new StringBuffer();
// order(arr[0]);
// System.out.println(br_pre + "\n" + br_in + "\n" + br_post);
}
// static void order(Node node) {
// br_pre.append(node.value);
// if (node.left != null) order(node.left);
// br_in.append(node.value);
// if (node.right != null) order(node.right);
// br_post.append(node.value);
// }
static void preOrder(Node node) {
br.append(node.value);
if (node.left != null) preOrder(node.left);
if (node.right != null) preOrder(node.right);
}
static void inOrder(Node node) {
if (node.left != null) inOrder(node.left);
br.append(node.value);
if (node.right != null) inOrder(node.right);
}
static void postOrder(Node node) {
if (node.left != null) postOrder(node.left);
if (node.right != null) postOrder(node.right);
br.append(node.value);
}
}
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ - 백준] 14923 - 미로탈출, Java(자바) (0) | 2023.03.07 |
---|---|
[BOJ 백준] 17090 - 미로 탈출하기, Java(자바) (0) | 2023.03.04 |
[BOJ 백준] 6068 - 시간 관리하기, Java(자바) (0) | 2023.03.03 |
[BOJ 백준] 7576 - 토마토, Java(자바) (0) | 2023.03.02 |
[BOJ 백준] 16988 - Baaaaaaaaaduk2 (Easy), Java(자바) (0) | 2023.03.02 |