📜  数据结构 |二叉树 |问题 10(1)

📅  最后修改于: 2023-12-03 15:26:08.915000             🧑  作者: Mango

数据结构 | 二叉树 | 问题 10

在计算机科学中,二叉树是一种树型结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。本文将介绍关于二叉树的第 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。