103. 二叉树的锯齿形层次遍历
题意
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
解题思路
和题目102一致;
实现
class Solution(object):
def zigzagLevelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
result = []
if not root:
return result
def helper(node, depth, res, is_reverse):
"""
利用前序遍历的思想
"""
if not node:
return
# 超出递归的长度表明是新的一层,则新添加数组
if depth >= len(res):
res.append([])
# 可以理解成每个node都能对应到树的depth
if is_reverse:
res[depth].insert(0, node.val)
else:
res[depth].append(node.val)
if node.left:
helper(node.left, depth+1, res, not is_reverse)
if node.right:
helper(node.right, depth+1, res, not is_reverse)
helper(root, 0, result, False)
return result