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 = Noneclass 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