📜  门| GATE 2017 MOCK II |问题29(1)

📅  最后修改于: 2023-12-03 14:58:18.016000             🧑  作者: Mango

门| GATE 2017 MOCK II |问题29

本题考察二叉搜索树(BST)。

题目描述

给定一个二叉搜索树,找到它的最小深度。最小深度是从根节点到最近的叶子节点的最短路径上的节点数量。

输入格式

输入包含两行,第一行为二叉搜索树中的节点数 $n$,第二行为 $n$ 个整数(范围 $[-10^9,10^9]$),表示树中各个节点的值。

输出格式

输出一个整数,表示二叉搜索树的最小深度。

样例输入
5
3 1 5 4 6
样例输出
2
解题思路

最小深度是从根节点到最近的叶子节点的最短路径上的节点数量,因此我们需要分别计算左子树和右子树的最小深度,然后取其中的最小值再加 1。

这里有一个细节需要特别注意,当左子树或右子树为空时,我们需要取非空子树的最小深度,而不是取两个子树的最小深度。

代码实现

下面是 Python3 代码的实现:

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 root is None:
            return 0
        if root.left is None and root.right is None:
            return 1
        left_depth = self.minDepth(root.left)
        right_depth = self.minDepth(root.right)
        if left_depth == 0 or right_depth == 0:
            return left_depth + right_depth + 1
        else:
            return min(left_depth, right_depth) + 1

注:以上代码通过 LeetCode 题库中的测试。