Leetcode 103.二叉树的锯齿形层次遍历
1 题目描述(Leetcode题目链接)
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
例如:给定二叉树
[
3
,
9
,
20
,
n
u
l
l
,
n
u
l
l
,
15
,
7
]
[3,9,20,null,null,15,7]
[3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回锯齿形层次遍历如下:
[
[3],
[20,9],
[15,7]
]
2 题解
层次遍历的基础上加个反转标志位,根据标志位判断应不应该反转。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]:
if not root:
return []
queue = collections.deque([root])
retv = []
reverse = 0
while queue:
num = len(queue)
clevel = []
while num > 0:
curr = queue.popleft()
clevel.append(curr.val)
if curr.left:
queue.append(curr.left)
if curr.right:
queue.append(curr.right)
num -= 1
if reverse:
retv.append(clevel[::-1])
reverse = 0
else:
retv.append(clevel)
reverse = 1
return retv