返回

赏心悦目!用递归和BFS从上到下打印二叉树,层序遍历全攻略

前端

层序遍历的魅力之旅

在计算机科学中,层序遍历(又称广度优先搜索,BFS)是一种遍历二叉树的方法,它将每一层的节点按从左到右的顺序依次访问。这种方法可以帮助我们更直观地了解二叉树的结构。

递归:经典之作

第一步,我们首先创建一个队列来存储当前层的节点,并将其推入队列中。

第二步,然后开始一层一层地遍历二叉树。在每一层,我们从队列中取出所有的节点,并将其子节点推入队列中。这样,下一层的节点就排好队了,等待着被访问。

第三步,最后,我们将每一层的节点从左到右依次打印出来。

BFS:另一种视角

除了递归之外,我们还可以使用广度优先搜索(BFS)来实现层序遍历。BFS是一种非递归的遍历方法,它通过队列来实现。

第一步,我们首先创建一个队列来存储当前层的节点,并将其推入队列中。

第二步,然后开始一层一层地遍历二叉树。在每一层,我们从队列中取出所有的节点,并将它们从左到右依次打印出来。

第三步,接着,我们将这些节点的子节点推入队列中。这样,下一层的节点就排好队了,等待着被访问。

第四步,重复步骤二和步骤三,直到队列为空。

Python代码实战

def level_order_traversal(root):
    if not root:
        return []

    queue = [root]
    result = []

    while queue:
        # 记录当前层的节点数
        level_size = len(queue)

        # 存储当前层的所有节点值
        level_nodes = []

        # 遍历当前层的所有节点
        for _ in range(level_size):
            # 出队当前节点
            node = queue.pop(0)

            # 将当前节点的值添加到本层节点列表
            level_nodes.append(node.val)

            # 将当前节点的子节点入队
            if node.left:
                queue.append(node.left)
            if node.right:
                queue.append(node.right)

        # 将本层节点列表添加到结果列表
        result.append(level_nodes)

    return result

结语

在本文中,我们详细介绍了如何从上到下打印二叉树,同时涵盖递归和广度优先搜索(BFS)两种方法。希望这篇文章能够帮助您加深对层序遍历的理解,并将其应用到您的项目中。