📜  逐行打印层级顺序遍历 |设置 1(1)

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

逐行打印层级顺序遍历 | 设置 1

简介

本文介绍如何通过代码实现一种二叉树的遍历方式:逐行打印层级顺序遍历。此遍历方式输出的是按照树的层级分行打印的节点值,每行输出一个层级的节点。在本文中,我们将采用BFS(广度优先遍历)算法来实现逐行打印二叉树。除此之外,我们还将介绍如何设置编程语言中的变量,使得可以根据需要打印不同层级节点的值。

代码实现

以下是使用Python编写的逐行打印层级顺序遍历的代码片段,其中 level 变量指定了要打印的层级:

def print_level_order(root, level=1):
    queue = []
    queue.append(root)

    while len(queue) > 0:
        level_size = len(queue)

        for i in range(level_size):
            curr = queue.pop(0)

            if curr.left:
                queue.append(curr.left)
            if curr.right:
                queue.append(curr.right)

            if level == 1:
                print(curr.val, end=' ')
            else:
                level -= 1
        
        if level == 1:
            print()

代码解析:

  1. 首先,我们定义了一个名为 print_level_order 的函数,并传入两个参数: rootlevel。其中, root 表示二叉树的根节点, level 表示所需要打印的层级。

  2. 接下来,我们创建了一个空的队列 queue。我们将根节点 root 放入队列。

  3. 然后,我们开启一个 while 循环。这个循环的判断条件是,队列 queue 不为空。

  4. 在每次循环开始前,我们先获取当前队列的大小。根据题意可知,每行打印一个层级的节点,因此我们要确定这个层级的大小。

  5. 然后,我们再开启一个 for 循环,从队列中依次取出 level_size 个节点,并将这个节点的左右子树加入到队列中,进行 BFS 逐层遍历。

  6. 如果当前 level 等于1,则输出当前节点的值,并遍历完当前节点后将 level 减一。这种情况下,我们只打印当前 level 的整个层次上的所有节点。

  7. 否则, level 变量继续减一,没到 level 层级的所有节点就全部跳过,直到 level 重新等于 1,进行下一次的层级遍历。

  8. 最后,如果 level 等于 1,我们将会换行,否则我们会继续进行第 4~7 步,直到队列 queue 为空。

总结

本文给出了一种逐行打印层级顺序遍历的二叉树遍历方法,并提供了Python语言的代码实现。此方法使用了BFS算法,并支持通过 level 变量来进行遍历范围的限制。性能上略逊于其它常用遍历方式(如前序、中序、后序遍历),但它对于要求输出每行一层节点的业务场景下,具有独特的优势。