Skip to content

Zigzag Order

LeetCode Problem

# https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/
from collections import deque


class Solution:
    def zigzagLevelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
        # same as level order but for odd levels : swap the order : [9, 20] = [20, 9] : level sub-list
        # O(N) Time and Space
        ans = []
        q = deque([root] if root else [])
        while q:
            level = []
            size = len(q)
            for i in range(size):
                node = q.popleft()
                level.append(node.val)
                if node.left:
                    q.append(node.left)
                if node.right:
                    q.append(node.right)

            # for every odd level : reverse the order (if len(ans) % 2 = 1)
            level = reversed(level) if len(ans) % 2 else level
            ans.append(level)

        return ans