代码改变世界

[LeetCode] 103. Binary Tree Zigzag Level Order Traversal _ Medium tag: BFS

2018-07-05 06:27  Johnson_强生仔仔  阅读(123)  评论(0编辑  收藏  举报

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, level = len(queue), []
 8             for _ in range(size):
 9                 node = queue.popleft()
10                 level.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(level)
17             else:
18                 ans.append(level[::-1])
19         return ans