-
[백준] 1991 트리 순회 - Java알고리즘 문제 풀이 2024. 5. 1. 16:49
문제 - 트리 순회
https://www.acmicpc.net/problem/1991
입력
첫째 줄에는 이진 트리의 노드의 개수 N(1 ≤ N ≤ 26)이 주어진다. 둘째 줄부터 N개의 줄에 걸쳐 각 노드와 그의 왼쪽 자식 노드, 오른쪽 자식 노드가 주어진다. 노드의 이름은 A부터 차례대로 알파벳 대문자로 매겨지며, 항상 A가 루트 노드가 된다. 자식 노드가 없는 경우에는 .으로 표현한다.
출력
첫째 줄에 전위 순회, 둘째 줄에 중위 순회, 셋째 줄에 후위 순회한 결과를 출력한다. 각 줄에 N개의 알파벳을 공백 없이 출력하면 된다.
예제 입력
7 A B C B D . C E F E . . F . G D . . G . .
예제 출력
ABDCEFG DBAECFG DBEGFCA
접근 방법
- 이 문제는 자료 구조 트리에 대한 기본적인 문제이다
- 트리의 전위, 중위, 후위 순회에 대한 개념이 있어야한다
코드 작성
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 { try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) { int N = Integer.parseInt(br.readLine()); Node[] tree = new Node[N + 1]; for (int i = 0; i < N; i++) { StringTokenizer st = new StringTokenizer(br.readLine()); char parentNode = st.nextToken().charAt(0); char leftNode = st.nextToken().charAt(0); char rightNode = st.nextToken().charAt(0); if (tree[parentNode - 'A'] == null) { tree[parentNode - 'A'] = new Node(parentNode); } if (leftNode != '.') { tree[leftNode - 'A'] = new Node(leftNode); tree[parentNode - 'A'].left = tree[leftNode - 'A']; } if (rightNode != '.') { tree[rightNode - 'A'] = new Node(rightNode); tree[parentNode - 'A'].right = tree[rightNode - 'A']; } } preorder(tree[0]); System.out.println(); inorder(tree[0]); System.out.println(); postorder(tree[0]); System.out.println(); } } public static void preorder(Node node) { if (node == null) { return; } System.out.print(node.value); preorder(node.left); preorder(node.right); } // 중위 순회 public static void inorder(Node node) { if (node == null) { return; } inorder(node.left); System.out.print(node.value); inorder(node.right); } // 후위 순회 public static void postorder(Node node) { if (node == null) { return; } postorder(node.left); postorder(node.right); System.out.print(node.value); } } class Node { char value; Node left; Node right; public Node(char value) { this.value = value; this.left = null; this.right = null; } }
풀고 느낀점
- 일단 이 문제로 인해 트리에 대해 알아보는 시간을 가져 본 것 같다
'알고리즘 문제 풀이' 카테고리의 다른 글
[백준] 9372 상근이의 여행 - Java (0) 2024.05.03 [프로그래머스] 예상 대진표 -Java (0) 2024.05.02 [백준] 11279 최대 힙 - Java (0) 2024.04.30 [프로그래머스] 구명보트 - Java (0) 2024.04.29 [백준] 5430 AC - Java (0) 2024.04.28