ZigZag Order traversal
Last updated
Last updated
{1,#,2}[[1],[2]]class Solution:
def zigzagLevelOrder(self , root ):
# input: tree root
# output: traversal results
# idea: BFS
# 1. traverse the tree in level-order as usual, but append the result
# of the same level to the second queue
# 2. reverse the result queue if needed
#
# use a queue to store the node of current leve l
# second queue to store nodes of the next level
# loop until queue is empty
# pop the node from queue
# add children to second queue
# when queue is empty, this level is finished
# append reverse node value in next level to res
# update queue
if not root:
return []
queue = [root]
level = []
level_res = []
res = []
reverse = False
while queue:
node = queue.pop(0)
if node.left:
level.append(node.left)
if node.right:
level.append(node.right)
# append result of current level
level_res.append(node.val)
if not queue:
if reverse:
# reverse the next level
level_res.reverse()
reverse = not reverse
res.append(level_res[:])
queue = level[:]
level = []
level_res = []
return res