返回
图解 LeetCode——102. 二叉树的层序遍历:深入浅出的解决方案
后端
2023-11-27 13:34:30
博客
前言
在学习编程的道路上,算法和数据结构是必不可少的基石。它们不仅是计算机科学的基础,也是解决现实世界问题的重要工具。LeetCode 是一个著名的在线算法题库,它为程序员提供了大量的算法练习题,帮助他们提高编程技能。
LeetCode 上的 102. 二叉树的层序遍历题目是一个经典的树形结构遍历问题。它要求我们从根节点开始,逐层地访问二叉树中的所有节点,并按照从左到右的顺序输出它们的键值。本篇文章将详细讲解这个题目,并提供多种解法,帮助读者深入理解层序遍历算法的原理和应用。
广度优先搜索(BFS)
广度优先搜索(BFS)是一种树形结构的遍历算法,它从根节点开始,逐层地访问二叉树中的所有节点。BFS 算法的实现非常简单,我们可以使用队列来存储当前要访问的节点,然后依次访问队列中的每个节点,并将其子节点入队。这样,我们就能够按照从左到右的顺序遍历二叉树中的所有节点。
def level_order(root):
"""
使用广度优先搜索(BFS)算法对二叉树进行层序遍历。
参数:
root:二叉树的根节点。
返回:
一个包含二叉树中所有节点键值的列表。
"""
# 创建一个队列来存储当前要访问的节点。
queue = [root]
# 创建一个列表来存储二叉树中所有节点的键值。
values = []
# 只要队列不为空,就继续遍历二叉树。
while queue:
# 将队列中的第一个节点出队。
node = queue.pop(0)
# 将节点的键值添加到列表中。
values.append(node.val)
# 将节点的左子节点和右子节点入队。
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
# 返回列表。
return values
递归
递归是一种解决树形结构问题的一种非常自然的方法。我们可以使用递归算法来对二叉树进行层序遍历,方法是先访问根节点,然后递归地访问其左子节点和右子节点。这样,我们就能够按照从左到右的顺序遍历二叉树中的所有节点。
def level_order(root):
"""
使用递归算法对二叉树进行层序遍历。
参数:
root:二叉树的根节点。
返回:
一个包含二叉树中所有节点键值的列表。
"""
# 创建一个列表来存储二叉树中所有节点的键值。
values = []
# 调用 helper 函数来进行层序遍历。
_level_order_helper(root, 0, values)
# 返回列表。
return values
def _level_order_helper(node, level, values):
"""
使用递归算法对二叉树进行层序遍历的辅助函数。
参数:
node:当前要访问的节点。
level:当前所在的层数。
values:一个列表来存储二叉树中所有节点的键值。
"""
# 如果当前节点为空,则直接返回。
if not node:
return
# 如果当前节点是第一层,则将其键值添加到列表中。
if level == 0:
values.append(node.val)
# 递归访问左子节点和右子节点。
_level_order_helper(node.left, level + 1, values)
_level_order_helper(node.right, level + 1, values)
总结
- 二叉树的层序遍历题目是一个经典的树形结构遍历问题,它要求我们从根节点开始,逐层地访问二叉树中的所有节点,并按照从左到右的顺序输出它们的键值。本篇文章提供了两种解法,分别是广度优先搜索(BFS)和递归。这两种解法的实现都非常简单,读者可以根据自己的喜好选择一种方法来解决这个问题。