📅  最后修改于: 2023-12-03 15:41:57.806000             🧑  作者: Mango
本文介绍如何通过代码实现一种二叉树的遍历方式:逐行打印层级顺序遍历。此遍历方式输出的是按照树的层级分行打印的节点值,每行输出一个层级的节点。在本文中,我们将采用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()
代码解析:
首先,我们定义了一个名为 print_level_order
的函数,并传入两个参数: root
和 level
。其中, root
表示二叉树的根节点, level
表示所需要打印的层级。
接下来,我们创建了一个空的队列 queue
。我们将根节点 root
放入队列。
然后,我们开启一个 while 循环。这个循环的判断条件是,队列 queue
不为空。
在每次循环开始前,我们先获取当前队列的大小。根据题意可知,每行打印一个层级的节点,因此我们要确定这个层级的大小。
然后,我们再开启一个 for 循环,从队列中依次取出 level_size
个节点,并将这个节点的左右子树加入到队列中,进行 BFS 逐层遍历。
如果当前 level
等于1,则输出当前节点的值,并遍历完当前节点后将 level
减一。这种情况下,我们只打印当前 level 的整个层次上的所有节点。
否则, level
变量继续减一,没到 level
层级的所有节点就全部跳过,直到 level 重新等于 1,进行下一次的层级遍历。
最后,如果 level
等于 1,我们将会换行,否则我们会继续进行第 4~7 步,直到队列 queue
为空。
本文给出了一种逐行打印层级顺序遍历的二叉树遍历方法,并提供了Python语言的代码实现。此方法使用了BFS算法,并支持通过 level
变量来进行遍历范围的限制。性能上略逊于其它常用遍历方式(如前序、中序、后序遍历),但它对于要求输出每行一层节点的业务场景下,具有独特的优势。