返回
前端工程师必知的算法基础知识:LeetCode 111. 二叉树的最小深度
前端
2024-01-28 00:33:51
算法基础与 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)算法来解决这道题。
希望本文能够帮助前端工程师们更好地理解算法的基础知识,并为解决实际问题提供帮助。