(Tree, Medium) Binary Tree Level Order Traversal

송재호·2025년 8월 10일
0

https://leetcode.com/problems/binary-tree-level-order-traversal/description/

트리 레벨 별 노드를 리스트에 담아서 주면 된다는 것 같은데, 대놓고 BFS 문제인 것 같다.

이렇게 각 순회마다 레벨 정보를 알고 있어야 풀 수 있는 문제라면,
대표적으로 두 가지 방법으로 풀어낼 수 있다.

  1. 큐에 넣을 때 level + 1을 해서 가지고 다닌다(Wrapping class나 배열 등..).
    이렇게 하면, 큐 안에서는 레벨 별 분기나 순회를 아예 고려하지 않고 논리적으로 current node + 1의 값만으로 모든 논리적 판단을 할 수 있다.

  2. BFS를 정말 레벨 단위로 구현한다.
    while loop 한 번에 한 개의 노드만 다루는 것이 아니고, 내부적으로 다시 que size만큼 반복하여 명시적으로 while loop는 레벨에 대한 순회로 여기도록 하는 것이다.

가독성 면에서는 2번이 좋은 것 같기도 하고..
특히 이 문제에 대해서는 별도 Wrapping도 필요없이 결과 리스트에 add만 하면 되는 방식이므로 2번으로 푼다.

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        
        List<List<Integer>> result = new ArrayList<>();
        if (root == null) {
            return result;
        }

        Queue<TreeNode> que = new LinkedList<>();
        que.offer(root);
        
        while (!que.isEmpty()) {
            int size = que.size();

            List<Integer> levelNodes = new ArrayList<>();
            for (int i=0; i<size; i++) {
                TreeNode current = que.poll();
                levelNodes.add(current.val);

                if (current.left != null) {
                    que.offer(current.left);
                }
                if (current.right != null) {
                    que.offer(current.right);
                }
            }
            result.add(levelNodes);
        }

        return result;
    }
}
profile
식지 않는 감자

0개의 댓글