[SWEA][DFS][Java] 1231. 중위순회 : D4
728x90
이 문제는 이진 트리가 주어졌을 때, 각 노드에 저장된 문자를 특정 순서로 출력하는 문제이다.
핵심은 트리를 어떻게 탐색하느냐인데, 이 문제에서 요구하는 방식은 중위 순회 (Inorder Traversal)이다.
중위 순회(inorder traversal)란?
이진 트리를 순회하는 방법 중 하나로, 순서는 다음과 같다.
왼쪽 자식 → 현재 노드 → 오른쪽 자식
A
| |
B C
중위 순회 결과:
B -> A -> C
전체 흐름
- 각 노드에 대해:
- 문자 정보 저장
- 왼쪽 / 오른쪽 자식 연결
- 루트(1번 노드)부터 시작
- 다음 순서로 탐색:
- 왼쪽 자식 방문
- 현재 노드 출력
- 오른쪽 자식 방문
자료구조 설계
1. 트리 구조 저장
static List<Integer>[] arr;
- 각 인덱스 = 노드 번호
- 리스트 = 자식 노드 (왼쪽, 오른쪽)
2. 노드 값 저장
static char[] chars;
- 각 노드가 가지는 문자 저장
3. 결과 저장
static StringBuilder result;
- 순회 결과를 문자열로 누적
핵심 로직 (DFS)
public static void dfs(int i){
// 왼쪽 자식
if(arr[i].size() >= 1){
dfs(arr[i].get(0));
}
// 현재 노드
result.append(chars[i]);
// 오른쪽 자식
if(arr[i].size() == 2){
dfs(arr[i].get(1));
}
}
시간복잡도
- 모든 노드를 한 번씩 방문하므로, O(N)
전체 코드

import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.util.StringTokenizer;
import java.util.List;
import java.util.ArrayList;
class Solution {
static List<Integer>[] arr;
static char[] chars;
static StringBuilder result;
public static void main(String args[]) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder sb = new StringBuilder();
for(int test_case = 1; test_case <= 10; test_case++) {
sb.append("#").append(test_case).append(" ");
int N = Integer.parseInt(br.readLine());
arr = new ArrayList[N+1];
chars = new char[N+1];
for(int i = 1; i <= N; i++){
arr[i] = new ArrayList<>();
}
for(int i = 0; i < N; i++){
st = new StringTokenizer(br.readLine());
int num = Integer.parseInt(st.nextToken());
char ch = st.nextToken().charAt(0);
chars[num] = ch;
if(st.hasMoreTokens()){
arr[num].add(Integer.parseInt(st.nextToken()));
}
if(st.hasMoreTokens()){
arr[num].add(Integer.parseInt(st.nextToken()));
}
}
result = new StringBuilder();
dfs(1);
sb.append(result).append("\n");
}
System.out.print(sb);
}
public static void dfs(int i){
if(arr[i].size() >= 1){
dfs(arr[i].get(0));
}
result.append(chars[i]);
if(arr[i].size() == 2){
dfs(arr[i].get(1));
}
}
}
728x90
'알고리즘 > SWEA' 카테고리의 다른 글
| [백준][dfs/완탐][Java] 15686. 치킨배달 : 골드 5 (0) | 2026.03.18 |
|---|---|
| [SWEA][구현][Java] 1224. [S/W 문제해결 기본] 6일차 - 계산기3 : D4 (0) | 2026.03.17 |
| [SWEA][bfs/그래프][Java] 7465. 창용 마을 무리의 개수 : D4 (0) | 2026.03.17 |
| [SWEA][BFS][Java] 1868. 파핑파핑 지뢰찾기 : D4 (0) | 2026.03.16 |
| [SWEA][DFS][Java] 2819. 격자판의 숫자 이어 붙이기 : D4 (feat. 메모리 절반 줄이기) (0) | 2026.03.16 |