📅  最后修改于: 2023-12-03 15:28:22.493000             🧑  作者: Mango
在二叉树的遍历算法中,逐行逐级遍历算法是一种非常常见的算法,它可以按层次遍历整棵二叉树的所有节点。本文介绍第三组逐行逐级遍历算法,使用了一个队列的数据结构,这种算法常用于 BFS(宽度优先搜索)和图形算法中。该算法具有时间和空间复杂度为 O(N) 的特点,其中 N 为二叉树节点的数量。
class Node:
def __init__(self, val=None, left=None, right=None):
self.val = val
self.left = left
self.right = right
def levelorder(root):
'''
:param root: 二叉树根节点
'''
if not root:
return []
res = [] # 存放结果的列表
queue = [root] # 定义队列,存放访问过的节点
while queue:
level = [] # 存放每一层节点值的列表
n = len(queue) # 每一层节点的数量
for i in range(n):
node = queue.pop(0) # 取出队首节点
level.append(node.val) # 将节点值加入该层列表中
if node.left: # 将节点的左子节点加入队列中
queue.append(node.left)
if node.right: # 将节点的右子节点加入队列中
queue.append(node.right)
res.append(level) # 将该层节点值列表加入结果中
return res
以上是 Python 语言的代码实现,代码中 Node
类用于构建二叉树节点,levelorder
函数用于实现逐行逐级遍历,输入参数为二叉树的根节点,输出结果为一个二维列表,列表中每个子列表表示每层节点值。
逐行逐级遍历算法是二叉树遍历的一种重要算法,该算法利用队列的先进先出特点实现按层次逐一遍历所有节点的目的。此算法实现简单,只需要一个队列的额外空间,适用于数据量较小的情况。若数据量较大,则会浪费过多的空间,运行效率降低。以下是该算法的时间和空间复杂度总结: