📅  最后修改于: 2023-12-03 15:10:20.237000             🧑  作者: Mango
在树中,遍历是一个很常见的操作。其中,前序遍历、中序遍历和后序遍历是最基本的遍历方式。但是,我们还可以进行一些变体的遍历方式,比如:按层遍历。按层遍历,顾名思义,就是从上到下、从左到右,一层一层地遍历整棵树。
给定一个二叉树,按照按层遍历的顺序,返回其节点值的层次遍历序列。即:从上到下、从左到右遍历整棵树,将每一层的节点值存储在同一个数组中。例如:
给定二叉树 [3,9,20,null,null,15,7]:
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:[[3], [9,20], [15,7]]
这种按层遍历的问题,最简单的思路就是使用 BFS(广度优先搜索)。BFS 借助队列来实现,我们将每一层的节点依次放进队列里,然后依次从队列里取出节点来进行操作。同时,在每层遍历开始之前,我们需要记录队列中节点的个数,即当前层节点的数量。这个数量就等于当前层的列表长度,因此我们可以在每次遍历开始前先记录队列的长度,然后按照这个长度遍历这一层的所有节点。
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
if not root:
return []
result = []
q = [root]
while len(q) > 0:
length = len(q)
level = []
for i in range(length):
node = q.pop(0)
level.append(node.val)
if node.left:
q.append(node.left)
if node.right:
q.append(node.right)
result.append(level)
return result
本题是一道比较简单的树遍历问题,主要利用 BFS 的思路进行解题,使用队列来记录每层的节点信息。对于 BFS 比较熟悉的话,时间复杂度和空间复杂度都很容易理解。