0

This BFS traversal uses a list comprehension to traverse a tree

def levelOrderBottom(self, root):
    res, queue = [], [root]
    while queue:
        res.append([node.val for node in queue if node])
        queue = [child for node in queue if node for child in (node.left, node.right)]
    return res[-2::-1]

For the

  res.append([node.val for node in queue if node])

I know that can be done iterative as

  for node in queue:
      if node:
          res.append([node.val])

but I can't quite wrap my head around what this code

  queue = [child for node in queue if node for child in (node.left, node.right)]

is doing iteratively, nor replicate it in a non list comprehension format

Mykel
  • 119
  • 1
  • 9

1 Answers1

1

Nested list comprehensions translate to nested for loops, in the same order.

queue = [child for node in queue if node for child in (node.left, node.right)]

becomes

queue = []
for node in queue:
    if not node:
        continue
    for child in (node.left, node.right):
        queue.append(child)
chepner
  • 497,756
  • 71
  • 530
  • 681