102.二叉树的层次遍历
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
3
/ \
9 20
/ \
15 7
[
[3],
[9,20],
[15,7]
] 层次遍历结果
# 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]]: # BFS
q = root and collections.deque([(root, 0)])
r = [] # 初始化队列,压入根节点(节点,层次)
while q: # 使用 wile 进入队列循环,直到搜索完毕
node, layer = q.popleft() # 从队头取出一个节点
if len(r) < layer + 1:
r.append([]) # 分配当前层的子数组
r[layer].append(node.val) # 记录当前层节点值
if node.left: # 放入周围的节点
q.append((node.left, layer + 1))
if node.right:
q.append((node.right, layer + 1))
return r
# 使用 BFS 遍历二叉树,队列同时记录节点与层次