欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > Leetcode刷题记录33——二叉树的最小深度

Leetcode刷题记录33——二叉树的最小深度

2025/5/6 16:23:51 来源:https://blog.csdn.net/weixin_51418895/article/details/147719091  浏览:    关键词:Leetcode刷题记录33——二叉树的最小深度

题源:https://leetcode.cn/problems/minimum-depth-of-binary-tree/description/

题目描述:
在这里插入图片描述

思路一:
使用 DFS 递归遍历的解法,每当遍历到一条树枝的叶子节点,就会更新最小深度,当遍历完整棵树后,就能算出整棵树的最小深度。
代码如下:

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):def __init__(self):# 记录最小深度(根节点到最近的叶子节点的距离)self.minDepthValue = float('inf')# 记录当前遍历到的节点深度self.currentDepth = 0def minDepth(self, root):""":type root: Optional[TreeNode]:rtype: int"""if root is None:return 0# 从根节点开始遍历self.traverse(root)return self.minDepthValuedef traverse(self, root):    if root is None:return None# 在二叉树的前序位置进入节点时增加当前深度self.currentDepth += 1# 如果当前节点是叶子节点,更新最小深度if root.left is None and root.right is None:self.minDepthValue = min(self.minDepthValue, self.currentDepth)self.traverse(root.left)self.traverse(root.right)# 在二叉树的后序位置离开节点时减少当前深度self.currentDepth -= 1

执行时间如下,可以看出,DFS算法速度较慢,因为该算法必须确切的知道每条树枝的深度(根节点到叶子节点的距离),才能找到最小的那个:
在这里插入图片描述

思路二:
使用 BFS 层序遍历的解法。按照 BFS 从上到下逐层遍历二叉树的特点,当遍历到第一个叶子节点时,就能得到最小深度。
代码如下:

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):def minDepth(self, root):""":type root: Optional[TreeNode]:rtype: int"""if root is None:return 0q = deque([root])# root 本身就是一层, depth 初始化为1depth = 1while q:sz = len(q)# 遍历当前层的节点for _ in range(sz):cur = q.popleft()# 判断是否到达叶子节点if cur.left is None and cur.right is None:return depth# 将下一层节点加入队列if cur.left is not None:q.append(cur.left)if cur.right is not None:q.append(cur.right)# 增加深度depth += 1return depth

执行时间如下,由于 BFS 逐层遍历的逻辑,第一次遇到目标节点时,所经过的路径就是最短路径,算法可能并不需要遍历完所有节点就能提前结束:
在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com