描述:给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
BFS大致都是这样的思路:
T1 : 用到deque的结构来模拟队列
T2 : 队列里有一个初始点
T3 : 每次处理从队列出队一个元素
T4 : 对元素进行扩张()
T5 : 对于扩张后满足某条件的点再进行处理,根据需要进入队列。进入队列的点就是扩到下一层的点 (不同题目需要处理的方法不同)
T6 :然后接着循环处理deque中的元素,直到deque为空,则代表所有的点都已经完成扩张
T7 : 结果
# 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]]:
if not root: return [] # 特殊情况,root为空直接返回
from collections import deque
# 下面就是BFS模板内容,BFS关键在于队列的使用
layer = deque()
layer.append(root) # 压入初始节点
res = [] # 结果集
while layer:
cur_layer = [] # 临时变量,记录当前层的节点
for _ in range(len(layer)): # 遍历某一层的节点
node = layer.popleft() # 将要处理的节点弹出
cur_layer.append(node.val)
if node.left: # 如果当前节点有左右节点,则压入队列,根据题意注意压入顺序,先左后右,
layer.append(node.left)
if node.right:
layer.append(node.right)
res.append(cur_layer) # 某一层的节点都处理完之后,将当前层的结果压入结果集
return res