leetcode 103 二叉树的锯齿形层次遍历
z

给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。

例如:
给定二叉树 [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
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None

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