def connect(root): for level in iter_level([root]): for a, b in izip(level, level[1:] + [None]): a.next = b
def zigzagLevelOrder(root): return [[node.val for node in v[::s]] for v, s in zip(iter_level([root]), zigzag())]
def levelOrder(root): return [[node.val for node in nodes] for nodes in iter_level([root])]
def levelOrderBottom(root): return [[node.val for node in nodes] for nodes in iter_level([root])][::-1]