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,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
return its zigzag level order traversal as:
[ [3], [20,9], [15,7] ]
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
from collections import deque
class Solution:
def zigzagLevelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
if not root:
return []
s1 = [root]
s2 = []
level =[]
result = []
while s1 or s2:
while s1:
root = s1.pop()
level.append(root.val)
if root.left:
s2.append(root.left)
if root.right:
s2.append(root.right)
if level:
result.append(level)
level = []
while s2:
root = s2.pop()
level.append(root.val)
if root.right:
s1.append(root.right)
if root.left:
s1.append(root.left)
if level:
result.append(level)
level = []
return result
TC : O(n)
SC:O(n)