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).
Input: root = [3,9,20,null,null,15,7]
Output: [[3],[20,9],[15,7]]
[]
.None
values/intermediate None
nodes?
None
values shouldn’t affect the traversal.Level Order Traversal: We can use a BFS (Breadth-First Search) approach for level order traversal. This involves using a queue to keep track of nodes at the current level, then processing nodes for the next level.
Zigzag Pattern: To implement the zigzag pattern, we use a flag (left_to_right
) to toggle the order of traversal at each level. If left_to_right
is true, append nodes’ values in normal order, otherwise append in reverse order.
Process:
left_to_right
flag, either append or prepend these values to the result list.left_to_right
flag after processing each level.By the end of the traversal, we will have the nodes’ values in zigzag level order.
from collections import deque
# Definition for a binary tree node.
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def zigzagLevelOrder(root: TreeNode):
if not root:
return []
results = []
node_queue = deque([root])
left_to_right = True
while node_queue:
level_size = node_queue.qsize() # Number of nodes at the current level
level_nodes = []
for _ in range(level_size):
node = node_queue.popleft()
level_nodes.append(node.val)
if node.left:
node_queue.append(node.left)
if node.right:
node_queue.append(node.right)
if not left_to_right:
level_nodes.reverse()
results.append(level_nodes)
left_to_right = not left_to_right
return results
Got blindsided by a question you didn’t expect?
Spend too much time studying?
Or simply don’t have the time to go over all 3000 questions?