返回
攀升吧,LeetCode:征服「剑指 Offer 32 - II. 从上到下打印二叉树 II」
前端
2024-01-19 05:21:00
前进的号角:理解题目要求
在「剑指 Offer 32 - II. 从上到下打印二叉树 II」中,我们的任务是遍历二叉树,并逐层打印其节点值。也就是说,我们需要将二叉树中的节点从上到下、从左到右地打印出来,并且以层级的方式呈现。
攻克难关:探索算法方案
解决这道题目的关键在于选择合适的遍历方式。这里,我们推荐使用深度优先搜索(DFS)或广度优先搜索(BFS)算法。
深入探索:深度优先搜索(DFS)
DFS 算法以递归的方式遍历二叉树,从根节点开始,依次访问其左子树和右子树。当遇到叶子节点时,返回上一层继续遍历。使用 DFS 算法,我们可以将节点值逐层添加到数组中,并最终得到从上到下打印的二叉树。
广阔视野:广度优先搜索(BFS)
BFS 算法以队列的方式遍历二叉树,从根节点开始,将其入队。然后,依次出队队列中的节点,并将其左子树和右子树入队。如此反复,直至队列为空。使用 BFS 算法,我们可以将节点值逐层添加到数组中,并最终得到从上到下打印的二叉树。
蓄势待发:算法实现
def levelOrder(root):
if not root:
return []
# 使用队列进行广度优先搜索
queue = [root]
# 使用数组存储每层的节点值
result = []
while queue:
# 获取当前层的节点数
level_size = len(queue)
# 存储当前层的节点值
level_values = []
# 遍历当前层的节点
for _ in range(level_size):
# 出队一个节点
node = queue.pop(0)
# 将节点值添加到当前层的节点值数组中
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
勇往直前:代码实例
# 创建二叉树
root = TreeNode(3)
root.left = TreeNode(9)
root.right = TreeNode(20)
root.right.left = TreeNode(15)
root.right.right = TreeNode(7)
# 调用算法函数
result = levelOrder(root)
# 打印结果
print(result)
输出:
[[3], [9, 20], [15, 7]]
胜利的曙光:回顾与展望
通过这篇文章,我们成功地征服了「剑指 Offer 32 - II. 从上到下打印二叉树 II」这道算法题。我们学习了深度优先搜索(DFS)和广度优先搜索(BFS)两种遍历二叉树的算法,并了解了如何使用队列来实现广度优先搜索。
在未来的旅程中,我们将继续探索算法世界的奥秘,解决更多具有挑战性的问题。敬请期待「攀升吧,LeetCode」系列的下一篇,我们将踏上新的征程,挑战新的难题。