📜  数据结构|树遍历|问题5(1)

📅  最后修改于: 2023-12-03 15:10:20.237000             🧑  作者: Mango

数据结构|树遍历|问题5

介绍

在树中,遍历是一个很常见的操作。其中,前序遍历、中序遍历和后序遍历是最基本的遍历方式。但是,我们还可以进行一些变体的遍历方式,比如:按层遍历。按层遍历,顾名思义,就是从上到下、从左到右,一层一层地遍历整棵树。

题目描述

给定一个二叉树,按照按层遍历的顺序,返回其节点值的层次遍历序列。即:从上到下、从左到右遍历整棵树,将每一层的节点值存储在同一个数组中。例如:

给定二叉树 [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 比较熟悉的话,时间复杂度和空间复杂度都很容易理解。