该题解使用 BFS (广度优先搜索) 的思想,通过队列实现。首先将根节点入队,然后逐层遍历二叉树。对于每一层,先统计队列中的节点数(即当前层的节点数),然后将这些节点依次出队并将它们的值记录在当前层的列表中,同时将它们的非空子节点加入队列,继续下一轮迭代。由于题目要求自底向上输出结果,所以在 BFS 过程中,我们需要把每一层的结果添加到结果列表的头部。最后返回结果列表即可。
时间复杂度: O(n)
空间复杂度: O(n)
from collections import deque
class Solution:
def levelOrderBottom(self, root: TreeNode) -> List[List[int]]:
if root is None:
return []
q = deque() # 初始化队列
q.append(root) # 根节点入队
res = [] # 存储最终结果
while q:
floor = [] # 存储当前层的节点值
size = len(q) # 当前层的节点数
# 遍历当前层的所有节点
for _ in range(size):
node = q.popleft() # 当前节点出队
floor.append(node.val) # 记录当前节点的值
# 将当前节点的非空子节点加入队列
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
res.append(floor) # 将当前层的节点值列表添加到结果列表的头部
return res[::-1] # 反转结果列表,实现自底向上的输出