尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

LeetCode 111. Minimum Depth of Binary Tree 题解

LeetCode 111. Minimum Depth of Binary Tree 题解 LeetCode 111. Minimum Depth of Binary Tree 题解题目描述给定一个二叉树找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。叶子节点是指没有子节点的节点。示例 1输入root [3,9,20,null,null,15,7] 输出2示例 2输入root [2,null,3,null,4,null,5,null,6] 输出5解题思路方法一递归深度优先搜索思路递归地计算左子树和右子树的最小深度如果当前节点为空返回 0如果当前节点只有一个子节点返回该子节点的最小深度加 1如果当前节点有两个子节点返回左右子树最小深度的较小值加 1复杂度分析时间复杂度O(n)其中 n 是二叉树中的节点个数。每个节点只被访问一次。空间复杂度O(h)其中 h 是二叉树的高度。递归调用的栈空间取决于二叉树的高度最坏情况下为 O(n)。方法二迭代广度优先搜索使用队列思路使用队列来实现广度优先搜索每次处理一层的节点深度加 1当遇到第一个叶子节点时返回当前深度因为广度优先搜索是按层次遍历的所以第一个遇到的叶子节点一定是深度最小的复杂度分析时间复杂度O(n)其中 n 是二叉树中的节点个数。每个节点只被访问一次。空间复杂度O(n)最坏情况下队列的大小为 O(n)。代码实现方法一递归深度优先搜索# Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution: def minDepth(self, root: Optional[TreeNode]) - int: if not root: return 0 # 如果只有一个子节点返回该子节点的最小深度加 1 if not root.left: return self.minDepth(root.right) 1 if not root.right: return self.minDepth(root.left) 1 # 如果有两个子节点返回左右子树最小深度的较小值加 1 return min(self.minDepth(root.left), self.minDepth(root.right)) 1方法二迭代广度优先搜索# Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right from collections import deque class Solution: def minDepth(self, root: Optional[TreeNode]) - int: if not root: return 0 queue deque([root]) depth 0 while queue: depth 1 level_size len(queue) for _ in range(level_size): node queue.popleft() # 检查是否是叶子节点 if not node.left and not node.right: return depth # 将子节点加入队列 if node.left: queue.append(node.left) if node.right: queue.append(node.right) return depth测试用例测试用例 1输入root [3,9,20,null,null,15,7]输出2测试用例 2输入root [2,null,3,null,4,null,5,null,6]输出5测试用例 3输入root []输出0测试用例 4输入root [1]输出1总结本题是二叉树的经典问题主要考察对树的遍历和递归的理解。两种方法各有特点递归深度优先搜索代码简洁易懂逻辑清晰但在树深度较大时可能会遇到栈溢出的问题。迭代广度优先搜索在遇到第一个叶子节点时立即返回不需要遍历整个树对于某些情况更高效。在实际应用中广度优先搜索通常是解决最小深度问题的首选方法因为它可以在找到第一个叶子节点时立即返回避免了不必要的计算。
返回列表