# 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 classSolution: deflevelOrder(self, root: Optional[TreeNode]) -> List[List[int]]: if root isNone: return [] ans = [] q = deque([root]) while q: cur = [] # 记录此时队列的长度,即为【当前层】的全部节点数 for _ inrange(len(q)): node = q.popleft() cur.append(node.val) # 将下一层的子节点排入队尾 if node.left: q.append(node.left) if node.right: q.append(node.right) ans.append(cur) return ans
复杂度分析
时间复杂度:O(N),其中 N 是二叉树的节点的数量。对于每一个节点,我们只做一次进队列和一次出队列的操作,时间开销严格与节点总数成正比。
classTreeNode: def__init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right
defbuild_tree(arr): ifnot arr or arr[0] isNone: returnNone root = TreeNode(arr[0]) queue = [root] i = 1 while queue and i < len(arr): node = queue.pop(0) if arr[i] isnotNone: node.left = TreeNode(arr[i]) queue.append(node.left) i += 1 if i < len(arr) and arr[i] isnotNone: node.right = TreeNode(arr[i]) queue.append(node.right) i += 1 return root
deftree_to_list(root): ifnot root: return [] result = [] queue = [root] while queue: node = queue.pop(0) if node: result.append(node.val) queue.append(node.left) queue.append(node.right) else: result.append(None) while result and result[-1] isNone: result.pop() return result
while q: cur = [] # 记录此时队列的长度,即为【当前层】的全部节点数 for _ inrange(len(q)): node = q.popleft() cur.append(node.val) # 将下一层的子节点排入队尾 if node.left: q.append(node.left) if node.right: q.append(node.right) ans.append(cur)
return ans
defmain(): arr = sys.stdin.read().strip().split() tree_arr = [Noneif v == 'None'elseint(v) for v in arr] root = build_tree(tree_arr)
sol = Solution() result = sol.levelOrder(root) print(result)