返回

巧用队列,层序遍历二叉树,Python轻松搞定!

人工智能

1. 层序遍历简介

层序遍历(又称广度优先搜索)是一种广泛应用于树和图等数据结构上的遍历算法。它按照树或图的层次,从上到下、从左到右依次访问每个节点。

2. Python中的队列数据结构

在实现层序遍历算法时,我们将使用Python中的队列(queue)数据结构。队列是一种先进先出(FIFO)的数据结构,这意味着最早进入队列的元素将最先被取出。

3. Python实现层序遍历算法

def level_order_traversal(root):
  """
  二叉树的层序遍历

  :param root: 二叉树的根节点
  :return: 层序遍历结果
  """

  # 初始化队列
  queue = collections.deque([root])

  # 结果列表
  result = []

  # 循环遍历队列
  while queue:
    # 当前层的节点数
    level_size = len(queue)

    # 当前层的节点值列表
    level_values = []

    # 遍历当前层的节点
    for _ in range(level_size):
      # 从队列中取出一个节点
      node = queue.popleft()

      # 将节点值添加到当前层的节点值列表中
      level_values.append(node.val)

      # 如果当前节点有左孩子,则将其加入队列
      if node.left:
        queue.append(node.left)

      # 如果当前节点有右孩子,则将其加入队列
      if node.right:
        queue.append(node.right)

    # 将当前层的节点值列表添加到结果列表中
    result.append(level_values)

  return result

4. 算法复杂度分析

层序遍历算法的时间复杂度为O(n),其中n是二叉树中的节点数。这是因为在最坏的情况下,算法需要访问每个节点一次。

算法的空间复杂度为O(n),这是因为在最坏的情况下,队列中可能存储所有节点。

5. 算法应用场景

层序遍历算法广泛应用于各种场景,包括:

  • 计算二叉树的高度
  • 检查二叉树是否为完全二叉树
  • 查找二叉树中的最长路径
  • 将二叉树序列化为字符串
  • 从二叉树中生成层次结构数据

6. 扩展阅读

如果你对层序遍历算法有更深入的兴趣,可以参考以下资源: