📅  最后修改于: 2023-12-03 14:55:32.610000             🧑  作者: Mango
二叉树(Binary Tree)是一种树状的数据结构,其中每个节点最多有两个子节点,分别称为左子节点和右子节点。对于一棵二叉树,我们可以定义它的深度为从根节点到叶子节点的最长路径的长度。而最小深度则是从根节点到最近的叶子节点的最短路径的长度。
在这个主题中,我们将解决如何查找给定二叉树的最小深度。
我们可以使用递归的方法来查找二叉树的最小深度。对于根节点,如果它没有左子树或右子树,则最小深度即为 1。如果它有左子树或右子树,但是没有右子树或左子树,则最小深度即为其左子树或右子树的最小深度加 1。如果它既有左子树又有右子树,则最小深度即为其左子树和右子树的最小深度较小值加 1。
下面是对该算法的具体实现:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def minDepth(self, root: TreeNode) -> int:
if not root:
return 0
if not root.left and not root.right:
return 1
if not root.left:
return self.minDepth(root.right) + 1
if not root.right:
return self.minDepth(root.left) + 1
return min(self.minDepth(root.left), self.minDepth(root.right)) + 1
该算法的时间复杂度为 O(n),其中 n 表示二叉树的节点个数。因为我们需要遍历每个节点,所以最坏情况下时间复杂度为 O(n)。而空间复杂度则为递归调用栈的深度,最坏情况下会遍历整棵树,因此空间复杂度也为 O(n)。
通过对二叉树最小深度的查找,我们可以更好地了解递归算法的应用和实现。此外,在实际开发中,树状的数据结构也经常用来描述和处理复杂的数据关系,因此对它的深入理解也是非常有益的。