此题解采用了层次遍历(广度优先搜索)的方法来遍历二叉树。首先,使用一个队列来存储每一层的节点。在每一轮循环中,先记录当前队列的长度,这个长度代表了这一层的节点数量。然后,依次从队列中取出这些节点,并将它们的值加入到当前层的结果列表中。同时,如果当前节点有左或右子节点,就将这些子节点加入队列中。这样一来,队列总是包含了下一层的所有节点。当一层处理完毕后,将这一层的结果添加到最终结果列表中。重复这个过程,直到队列为空,此时所有的层都被处理完毕,算法结束。
时间复杂度: O(n)
空间复杂度: O(n)
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
res = [] # 用来存储最终的层序遍历结果
queue = deque() # 使用双端队列来实现层序遍历
queue.append(root) # 首先将根节点加入队列
while queue: # 当队列非空时进行循环
size = len(queue) # 当前层的节点数
floor = [] # 用来暂存当前层的结果
for _ in range(size): # 遍历当前层的每个节点
node = queue.popleft() # 从队列中取出一个节点
if node: # 如果节点非空
floor.append(node.val) # 将节点的值加入当前层的结果中
queue.append(node.left) # 将左子节点加入队列
queue.append(node.right) # 将右子节点加入队列
if floor: # 如果当前层有结果
res.append(floor) # 将当前层的结果加入到最终结果中
return res