Ideas
算法:DFS
数据结构:二叉树
Code
时间复杂度:O(N),其中 N 为二叉树的节点数。每个节点会且仅会被遍历一次。
空间复杂度:O(N)。我们需要维护存储节点的队列和存储节点值的双端队列,空间复杂度为 O(N)。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
from collections import deque
class Solution:
def zigzagLevelOrder(self, root: TreeNode) -> List[List[int]]:
if not root: return []
ans = []
q = deque()
q.append(root)
re = 0
while (len(q) > 0):
layer = []
for i in range(1, len(q) + 1):
node = q.popleft()
layer.append(node.val)
if node.left: q.append(node.left)
if node.right: q.append(node.right)
if re % 2 == 1: layer = layer[::-1]
if layer != []: ans.append(layer)
re += 1
return ans