📅  最后修改于: 2023-12-03 15:26:08.915000             🧑  作者: Mango
在计算机科学中,二叉树是一种树型结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。本文将介绍关于二叉树的第 10 个问题。
现有一个二叉树,请编写一个算法来计算该二叉树中最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
注意:叶子节点是指没有子节点的节点。
给定二叉树 [3,9,20,null,null,15,7]
,
3
/ \
9 20
/ \
15 7
其最小深度为 2。即节点值为 3 的根节点到叶子节点 9 的距离为 1,节点值为 3 的根节点到叶子节点 15 的距离为 2,节点值为 3 的根节点到叶子节点 7 的距离为 2,因此最小深度为 2。
要求二叉树中的最小深度,可以递归遍历整棵树。当遇到一个节点既没有左子节点又没有右子节点时,说明其为叶子节点,返回 1。当遇到一个节点只有一个子节点时,需要继续遍历其子节点,因此返回该子节点的深度。当遇到一个节点有两个子节点时,需要对其左右子节点分别递归遍历,并取其中较小的深度值,然后再加上本节点的深度 1。
对于遍历整棵树的递归函数,可以设置两个参数,分别为当前节点和当前深度。初始时,当前深度为 1。
以下为 Python 语言的代码实现:
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 or not root.right:
return self.minDepth(root.left) + self.minDepth(root.right) + 1
return min(self.minDepth(root.left), self.minDepth(root.right)) + 1
本文介绍了关于二叉树的第 10 个问题:计算二叉树中的最小深度。对于这个问题,我们需要递归遍历整棵树,并对每个节点进行判断,从而求得最小深度。需要注意的是,当遇到一个节点只有一个子节点时,需要继续遍历其子节点,因此返回该子节点的深度。当遇到一个节点有两个子节点时,需要对其左右子节点分别递归遍历,并取其中较小的深度值,然后再加上本节点的深度 1。