返回

前端工程师必知的算法基础知识:LeetCode 111. 二叉树的最小深度

前端

算法基础与 LeetCode 简介

算法是计算机科学的重要组成部分,它为解决复杂问题提供了高效、严谨的方法。LeetCode 是一个著名的算法题库网站,它提供了大量高质量的算法题目,帮助程序员磨炼算法技能,提升编程能力。

LeetCode 111. 二叉树的最小深度

LeetCode 111. 二叉树的最小深度是一道经典的算法题,它要求给定一棵二叉树,求出其中最短路径的长度。这道题考察了程序员对二叉树及其深度遍历算法的理解。

算法实现

我们可以使用递归或深度优先搜索(DFS)算法来解决这道题。

递归解法

def min_depth(root):
    """
    计算二叉树的最小深度。

    Args:
        root: 二叉树的根节点。

    Returns:
        二叉树的最小深度。
    """

    if not root:
        return 0

    # 如果当前节点是叶子节点,则最小深度为 1。
    if not root.left and not root.right:
        return 1

    # 如果当前节点的左子树和右子树都不为空,则最小深度为左右子树最小深度的较小值加 1。
    if root.left and root.right:
        return min(min_depth(root.left), min_depth(root.right)) + 1

    # 如果当前节点只有左子树或右子树,则最小深度为该子树的最小深度加 1。
    return min_depth(root.left or root.right) + 1

深度优先搜索解法

def min_depth(root):
    """
    计算二叉树的最小深度。

    Args:
        root: 二叉树的根节点。

    Returns:
        二叉树的最小深度。
    """

    if not root:
        return 0

    # 使用栈来存储当前正在访问的节点。
    stack = [(root, 1)]

    # 最小深度。
    min_depth = float('inf')

    while stack:
        # 获取栈顶的节点和深度。
        node, depth = stack.pop()

        # 如果当前节点是叶子节点,则更新最小深度。
        if not node.left and not node.right:
            min_depth = min(min_depth, depth)

        # 如果当前节点有左子树,则将左子树入栈。
        if node.left:
            stack.append((node.left, depth + 1))

        # 如果当前节点有右子树,则将右子树入栈。
        if node.right:
            stack.append((node.right, depth + 1))

    return min_depth

总结

LeetCode 111. 二叉树的最小深度是一道经典的算法题,考察了程序员对二叉树及其深度遍历算法的理解。我们可以使用递归或深度优先搜索(DFS)算法来解决这道题。

希望本文能够帮助前端工程师们更好地理解算法的基础知识,并为解决实际问题提供帮助。