双端队列,奇数时正常,偶数时头插
def zigzagLevelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
res = []
stack = [root]
if not root:
return res
flag = True
while stack:
level = deque()
for i in range(len(stack)):
node = stack.pop(0)
if flag:
level.append(node.val)
else:
level.appendleft(node.val)
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)
res.append(list(level))
flag = not flag
return res
先正常遍历,再反转
def zigzagLevelOrder(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
res = []
stack = [root]
if not root:
return res
while stack:
level = []
for i in range(len(stack)):
node = stack.pop(0)
level.append(node.val)
if node.left:
stack.append(node.left)
if node.right:
stack.append(node.right)
res.append(level)
for i in range(1,len(res),2): #注意这种取奇数的方法,少遍历一般还少判断
res[i].reverse()
return res