📅  最后修改于: 2023-12-03 14:58:01.540000             🧑  作者: Mango
逐行层序遍历是一种广度优先搜索算法的变种,它用于遍历树或图的节点。这种遍历方式将树或图的节点按照层级顺序进行访问,从根节点开始,依次访问每一层的节点,直到遍历完所有节点。
在这个介绍中,我们将学习逐行层序遍历算法的另一种实现方式,即 "设置 2" 算法。这种算法使用两个队列来记录当前层和下一层的节点,在遍历过程中交替使用这两个队列,以达到逐行输出的效果。
下面是设置 2 算法的具体步骤:
初始化两个队列,currentLevel
和 nextLevel
,并将根节点入队到 currentLevel
。
循环直到队列为空:
currentLevel
中出队一个节点,并访问该节点。nextLevel
。currentLevel
队列为空,则交换 currentLevel
和 nextLevel
,以进入下一层。重复步骤 2,直到遍历完所有节点。
下面是使用 Python 语言实现逐行层序遍历的设置 2 算法的示例代码:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def levelOrder(root: TreeNode) -> List[List[int]]:
if not root:
return []
result = []
current_level = [root]
while current_level:
next_level = []
current_level_values = []
for node in current_level:
current_level_values.append(node.val)
if node.left:
next_level.append(node.left)
if node.right:
next_level.append(node.right)
result.append(current_level_values)
current_level = next_level
return result
假设我们有下面这棵二叉树:
3
/ \
9 20
/ \
15 7
通过调用 levelOrder
函数,我们可以得到以下的逐行层序遍历结果:
root = TreeNode(3)
root.left = TreeNode(9)
root.right = TreeNode(20)
root.right.left = TreeNode(15)
root.right.right = TreeNode(7)
print(levelOrder(root)) # Output: [[3], [9, 20], [15, 7]]
逐行层序遍历是一种非常有用的算法,特别适用于需要逐行输出树节点值的场景。通过设置 2 算法,我们可以使用两个队列来实现逐行遍历效果。这种算法的时间复杂度是 O(n),其中 n 是树的节点数量。