I believe the following simple tree pre-order traversal is cleaner and simpler than the solution code. What are your thoughts?
def traverse(root):
result = []
def tr(node, level):
if node:
if not level < len(result):
result.append([])
result[level].append(node.val)
tr(node.left, level+1)
tr(node.right, level+1)
tr(root, 0)
return result