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 [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
return its zigzag level order traversal as:
[ [3], [20,9], [15,7] ]
这个题目的思路也是典型的BFS, 只是每一层分别正序和倒序, 我还是利用102. Binary Tree Level Order Traversal_Medium tag: BFS的思路,只是多加了一个len(ans)%2== 0 去判断是应该正序还是倒序, 如果是倒序, 就把temp reverse然后append进入ans里面即可.
1. Constraints
1) edge case, root is None
2. Ideas
BFS: T: O(n) S: O(n)
3.code:
1 class Solution: 2 def zigzagLevel(self, root): 3 ans = [] 4 if not root: return ans # edge case 5 queue = collections.deque([root]) 6 while queue: 7 size, temp = len(queue), [] 8 for _ in range(size): 9 node = queue.popleft() 10 temp.append(node.val) 11 if node.left: 12 queue.append(node.left) 13 if node.right: 14 queue.append(node.right) 15 if len(ans)%2 ==0: 16 ans.append(temp) 17 else: 18 ans.append(temp[::-1]) 19 return ans