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,#,#,15,7}
,
3 / \ 9 20 / \ 15 7
return its zigzag level order traversal as:
[ [3], [20,9], [15,7] ]和Binary Tree Level Order Traversal类似,也是树的层序遍历,只不过是在偶数层自左向右遍历,奇数层自右向左遍历~可以直接在 Binary Tree Level Order Traversal的代码上做改进,把奇数层的结果数列reverse一下~或者用下面这种解法也是可以的~同时维护两个栈,一个栈用来读取,一个栈用来存放下一层的节点
class Solution:
# @param root, a tree node
# @return a list of lists of integers
def zigzagLevelOrder(self, root):
if root is None: return []
cur, res, vals = [root], [], [root.val]
while cur:
res.append(vals)
next, vals = [], []
while cur:
node = cur.pop()
if len(res) % 2 == 0:
if node.left:
vals.append(node.left.val)
next.append(node.left)
if node.right:
vals.append(node.right.val)
next.append(node.right)
else:
if node.right:
vals.append(node.right.val)
next.append(node.right)
if node.left:
vals.append(node.left.val)
next.append(node.left)
cur = next
return res