
난이도: ★☆☆☆☆ • solved on: 2025-12-05

자료구조
Queue<Node> : BFS를 위한 핵심 자료구조ArrayDeque : Java에서 Queue 성능이 좋은 구현체알고리즘/기법
핵심 키워드
- 문제 분해
레벨 순서는 BFS 수행 순서와 동일하다.
루트 노드를 큐에 넣는다.
큐가 빌 때까지 다음을 반복한다:
- 노드를 꺼낸다.
- 왼쪽 자식이 있으면 큐에 넣는다.
- 오른쪽 자식이 있으면 큐에 넣는다.
- 현재 노드의 값을 출력한다.
핵심 로직 흐름
queue.add(root) while queue not empty: node = queue.poll() print(node.data) if node.left exists → queue.add(left) if node.right exists → queue.add(right)예외 처리
- root가 null인 경우 → 출력 없이 종료
public static void levelOrder(Node root) {
if (root == null) return;
Queue<Node> queue = new ArrayDeque<>();
queue.add(root);
while (!queue.isEmpty()) {
Node tmpNode = queue.poll();
if (tmpNode.left != null) {
queue.add(tmpNode.left);
}
if (tmpNode.right != null) {
queue.add(tmpNode.right);
}
System.out.print(tmpNode.data + " ");
}
}
시간 복잡도: O(N) — 모든 노드를 한 번씩 방문
공간 복잡도: O(N) — 최악의 경우 큐에 트리 한 레벨이 모두 담기는 경우
preorder, inorder, postorder를 모두 재귀로 해결한 경험 때문에 본 문제도 재귀적으로 풀 수 있을 것이라 고정관념이 생겼다.
level-order는 DFS 성격의 재귀와 달리 BFS 기반이라 queue 중심 접근이 필요했음을 떠올리는 데 시간이 걸렸다.
BFS는 항상 큐라는 점을 다시 확인할 수 있었다.
LinkedList보다 ArrayDeque가 Queue 용도로 더 효율적이다.문제 링크: https://www.hackerrank.com/challenges/tree-level-order-traversal/problem
참고 블로그/깃허브: 없음
비슷한 유형 (GPT 추천)
확장 문제 (GPT 추천)