Medium
Given the root
of a binary tree, return the zigzag level order traversal of its nodes’ values. (i.e., from left to right, then right to left for the next level and alternate between).
Example 1:
Input: root = [3,9,20,null,null,15,7]
Output: [[3],[20,9],[15,7]]
Example 2:
Input: root = [1]
Output: [[1]]
Example 3:
Input: root = []
Output: []
Constraints:
[0, 2000]
.-100 <= Node.val <= 100
from typing import List, Optional
from collections import deque
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def zigzagLevelOrder(self, root: Optional[TreeNode]) -> List[List[int]]:
result = []
if root is None:
return result
q = deque()
q.append(root)
q.append(None)
zig = True
level = deque()
while q:
node = q.popleft()
while q and node is not None:
if zig:
level.append(node.val)
else:
level.appendleft(node.val)
if node.left is not None:
q.append(node.left)
if node.right is not None:
q.append(node.right)
node = q.popleft()
result.append(list(level))
zig = not zig
level = deque()
if q:
q.append(None)
return result