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]
]
假设有第0层。
这题和level order traversal的区别在于奇数level的顺序是相反的,因此做法是先用level order traversal把所有结果都存起来。 然后奇数level的解求reverse.时间复杂度和空间复杂度都是O(n)
This problem is similar with level order traversal. We need to append all the value to the solution and then reverse the value based on odd levels.
Solution is following:
# Definition for a binary tree node
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
# @param root, a tree node
# @return a list of lists of integers
def preorder(self,root,solution,level):
if root:
if len(solution)<level+1:
solution.append([])
solution[level].append(root.val)
if root.left:
self.preorder(root.left,solution,level+1)
if root.right:
self.preorder(root.right,solution,level+1)
def zigzagLevelOrder(self, root):
if root==None:
return []
solution=[]
self.preorder(root,solution,0)
for index in range(len(solution)):
if index%2==1:
solution[index].reverse()
return solution