给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
例如:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回锯齿形层次遍历如下:
1 2 3 4 5
| [ [3], [20,9], [15,7] ]
|
- 每一次将cur节点按从左到右的顺序加入到templist
- 在添加到ans时,根据level的奇偶来决定是顺序的添加到ans[level]中还是逆序的添加到ans[level]中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
class Solution(object): def zigzagLevelOrder(self, root): """ :type root: TreeNode :rtype: List[List[int]] """ ans = [] if not root: return ans queue = [] level = 0 queue.append(root) while queue: temp = [] n = len(queue) for i in range(n): t = queue.pop(0) if len(ans) == level: ans.append([]) if level&1: ans[level].insert(0, t.val) else: ans[level].append(t.val) if t.left: temp.append(t.left) if t.right: temp.append(t.right)
queue += temp level += 1 return ans
|