返回

攀升吧,LeetCode:征服「剑指 Offer 32 - II. 从上到下打印二叉树 II」

前端

前进的号角:理解题目要求

在「剑指 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」系列的下一篇,我们将踏上新的征程,挑战新的难题。