Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).
For example:
Given binary tree
Given binary tree
{3,9,20,#,#,15,7}
, 3
/ \
9 20
/ \
15 7
return its zigzag level order traversal as:
[
[3],
[20,9],
[15,7]
]
Solution
We use a variant of BFS with two stacks, one for this level one for the next one. As we traverse one level we add the children into the next level stack, once a level is traversed the next level stack becomes the actual one.
# Definition for a binary tree node # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: # @param root, a tree node # @return a list of lists of integers def zigzagLevelOrder(self, root): solution = [] thisLevel =[] if root != None: thisLevel.append(root) leftToRight = True while len(thisLevel)>0: levelSolution = [] nextLevel = [] while len(thisLevel)>0: node = thisLevel.pop() levelSolution.append(node.val) if leftToRight: if node.left != None: nextLevel.append(node.left) if node.right != None: nextLevel.append(node.right) else: if node.right != None: nextLevel.append(node.right) if node.left != None: nextLevel.append(node.left) thisLevel = nextLevel solution.append(levelSolution) leftToRight = not leftToRight return solution
No comments :
Post a Comment