103. Binary Tree Zigzag Level Order Traversal

양성준·2025년 5월 20일

코딩테스트

목록 보기
60/102

문제

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

풀이

class Solution {
    public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
        Queue<TreeNode> queue = new LinkedList<>();
        List<List<Integer>> list = new ArrayList<>();
        if(root == null) {
            return list;
        }
        queue.add(root);
        int level = 0;

        while(!queue.isEmpty()) {
            int size = queue.size();
            List<Integer> values = new ArrayList<>();
            for(int i = 0; i < size; i++) {
                TreeNode node = queue.poll();
                if(node.left != null) {
                    queue.add(node.left);
                }

                if(node.right != null) {
                    queue.add(node.right);
                }
                values.add(node.val);
            } 
            if(level % 2 == 0) {
                list.add(values);
            } else {
            	// return 타입은 void, list를 역순으로 바꿔줌
                Collections.reverse(values);
                list.add(values);
            }
            level++;
        }
        return list;
    }
}
  • 레벨 별로 zigzag로 노드를 저장해야하므로 BFS 사용
  • level이 홀수인 경우 왼쪽부터 읽기
    level이 짝수인 경우 오른쪽부터 읽기
  • 각 레벨 별 value를 values 리스트에 저장해놓고, 홀수인 경우 Collections.reverse(values)로 리스트를 뒤집고 저장
    • Collections.reverse()는 각 요소를 탐색하면서 하나씩 반대로 바꿔줌 -> O(N)
profile
백엔드 개발자

0개의 댓글