728x90
70번 트리 순회
내가 떠올린 풀이 해설
2차원 배열에 트리 데이터를 저장한다. 저장할 때 index화 하여 저장한다. 전위 순회 함수를 구현해 실행한다. 중위 순회, 후위 순회도 같은 과정으로 구현한다.
전위 순회 순서
현재 노드 -> 왼쪽 노드 -> 오른쪽 노드
중위 순회 순서
왼쪽 노드 -> 현재 노드 -> 오른쪽 노드
후위 순회 순서
왼쪽 노드 -> 오른쪽 노드 -> 현재 노드
정확한 풀이
import java.io.*;
import java.util.*;
public class Baek1991 {
static int[][] tree;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
tree = new int[26][2];
for(int i = 0; i < n; i++) {
String[] str = br.readLine().split(" ");
int node = str[0].charAt(0) - 'A';
char left = str[1].charAt(0);
char right = str[2].charAt(0);
if(left == '.') {
tree[node][0] = -1;
}
else {
tree[node][0] = left - 'A';
}
if(right == '.') {
tree[node][1] = -1;
}
else {
tree[node][1] = right - 'A';
}
}
preOrder(0);
System.out.println();
inOrder(0);
System.out.println();
postOrder(0);
System.out.println();
}
private static void postOrder(int now) {
if(now == -1) {
return;
}
postOrder(tree[now][0]);
postOrder(tree[now][1]);
System.out.print((char)(now + 'A'));
}
private static void inOrder(int now) {
if(now == -1) {
return;
}
inOrder(tree[now][0]);
System.out.print((char)(now + 'A'));
inOrder(tree[now][1]);
}
private static void preOrder(int now) {
if(now == -1) {
return;
}
System.out.print((char)(now + 'A'));
preOrder(tree[now][0]);
preOrder(tree[now][1]);
}
}
오늘의 회고
오늘은 이진 트리 한 문제를 풀었습니다. 주어진 자료구조 형태만 충실히 구현하면 되는 문제라고 나와있었는데 많이 헤맸습니다. 이제 앞으로 배워야 할 알고리즘이 세그먼트 트리, 최소 공통 조상, 조합, 동적 계획법(DP) 4개가 남았는데 이 책을 끝내면 이제 단원별이 아닌 무작위로 문제를 뽑아서 풀 생각입니다. 그동안 배웠던 알고리즘으로 응용을 해서 풀어야 되는데 걱정이 되네요 꾸준히 하다 보면 목표에 도달할 것이라고 생각합니다. 꾸준히 열심히 하겠습니다.
728x90
'알고리즘 > 알고리즘 문제풀이' 카테고리의 다른 글
Do it! 알고리즘 코딩 테스트 (78번 ~ 79번) (0) | 2022.06.28 |
---|---|
Do it! 알고리즘 코딩 테스트 (76번 ~ 77번) (0) | 2022.06.27 |
Do it! 알고리즘 코딩 테스트 (69번) (0) | 2022.06.23 |
Do it! 알고리즘 코딩 테스트 (67번 ~ 68번) (0) | 2022.06.22 |
Do it! 알고리즘 코딩 테스트 (64번 ~ 66번) (0) | 2022.06.21 |