数据结构与算法之 leetcode 二叉树层序遍历算法 迭代法实现

数据结构与算法阿木 发布于 3 天前 1 次阅读


二叉树层序遍历算法(迭代法实现)详解

二叉树是一种常见的树形数据结构,由节点组成,每个节点最多有两个子节点:左子节点和右子节点。层序遍历(也称为广度优先遍历)是一种用于遍历二叉树的算法,它按照从上到下、从左到右的顺序访问每个节点。在LeetCode等编程竞赛平台中,二叉树的层序遍历是一个常见的面试题。

本文将围绕二叉树层序遍历算法,特别是迭代法实现,进行详细的分析和代码实现。我们将从基本概念开始,逐步深入到算法的细节,并最终提供一个完整的代码示例。

基本概念

二叉树

二叉树是一种特殊的树形数据结构,每个节点最多有两个子节点。以下是一个简单的二叉树示例:


A


/


B C


/


D E F


在这个例子中,节点A是根节点,节点B和C是A的子节点,节点D、E和F是B和C的子节点。

层序遍历

层序遍历是一种按层次访问二叉树的遍历方法。在层序遍历中,首先访问根节点,然后访问根节点的所有子节点,接着访问子节点的所有子节点,以此类推,直到所有节点都被访问。

迭代法实现

迭代法是层序遍历的一种实现方式,它使用一个队列来存储待访问的节点。以下是迭代法实现层序遍历的步骤:

1. 创建一个空队列。

2. 将根节点入队。

3. 当队列不为空时,执行以下操作:

- 计算队列的长度,得到当前层的节点数量。

- 遍历当前层的所有节点:

- 从队列中出队一个节点。

- 访问该节点。

- 将该节点的子节点(如果存在)入队。

4. 重复步骤3,直到队列为空。

代码实现

下面是使用Python语言实现的层序遍历算法:

python

from collections import deque

class TreeNode:


def __init__(self, value=0, left=None, right=None):


self.val = value


self.left = left


self.right = right

def levelOrder(root):


if not root:


return []



result = []


queue = deque([root])



while queue:


level_size = len(queue)


current_level = []



for _ in range(level_size):


node = queue.popleft()


current_level.append(node.val)



if node.left:


queue.append(node.left)


if node.right:


queue.append(node.right)



result.append(current_level)



return result

示例


构建一个简单的二叉树


root = TreeNode(1)


root.left = TreeNode(2)


root.right = TreeNode(3)


root.left.left = TreeNode(4)


root.left.right = TreeNode(5)

执行层序遍历


print(levelOrder(root))


输出结果为:


[[1], [2, 3], [4, 5]]


这表示我们首先访问根节点1,然后访问节点2和3,最后访问节点4和5。

总结

本文详细介绍了二叉树层序遍历算法的迭代法实现。通过使用队列来存储待访问的节点,我们可以按照从上到下、从左到右的顺序访问每个节点。这种迭代法实现简单易懂,是解决层序遍历问题的一种有效方法。

在实际应用中,层序遍历算法可以用于多种场景,例如在图形学中用于渲染场景,在数据结构中用于平衡二叉树等。通过掌握层序遍历算法,我们可以更好地理解和应用二叉树这种数据结构。