728x90
https://www.acmicpc.net/problem/1991
1991번: 트리 순회
첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파
www.acmicpc.net
트리를 입력받고,
전위순회, 중위순회, 후위순회 하면 된다.
입력이 한줄에
(노드) (왼쪽 자식) (오른쪽 자식)
으로 들어온다.
나는 노드를 Node클래스로 표현했고,
노드는 최대 26개밖에 되지 않기 때문에 Node배열을 만들어서 사용했다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class P1991 {
static class Node {
int left;
int right;
}
static Node[] arr = new Node[26];
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
for (int i = 0; i < n; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int now = st.nextToken().charAt(0) - 'A';
int left = st.nextToken().charAt(0) - 'A';
int right = st.nextToken().charAt(0) - 'A';
arr[now] = new Node();
if (left >= 0 && left < 26) {
arr[now].left = left;
} else {
arr[now].left = -1;
}
if (right >= 0 && right < 26) {
arr[now].right = right;
} else {
arr[now].right = -1;
}
}
preorder(0);
System.out.println();
inorder(0);
System.out.println();
postorder(0);
}
static void inorder(int now) {
if (now != -1) {
inorder(arr[now].left);
System.out.print((char) (now + 'A'));
inorder(arr[now].right);
}
}
static void preorder(int now) {
if(now!=-1) {
System.out.print((char)(now+'A'));
preorder(arr[now].left);
preorder(arr[now].right);
}
}
static void postorder(int now) {
if(now!=-1) {
postorder(arr[now].left);
postorder(arr[now].right);
System.out.print((char)(now+'A'));
}
}
}
728x90
'코딩 > 백준-자바' 카테고리의 다른 글
[자바] 백준 1717번: 집합의 표현 (0) | 2023.01.28 |
---|---|
[자바] 백준 2042번: 구간합 구하기(실패) (0) | 2023.01.28 |
[자바] 백준 2748번: 피보나치 수2 (0) | 2023.01.26 |
[자바] 백준 2805번: 나무 자르기 (0) | 2023.01.25 |
백준 10845번: 큐 (0) | 2023.01.24 |
댓글