📜  门| GATE CS 2020 |第 43 题(1)

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

GATE CS 2020 | Question 43

本文将介绍 GATE CS 2020 题库中的第 43 题,这道题目的主题是关于树和递归算法。

题目描述

给定一个二叉树,对于该树的每个节点,找到离该节点最近的那个叶子节点,并返回该节点到叶子节点的路径长度。

输入格式

输入的二叉树是一个根节点的引用。每个节点都包含一个指向左子节点和右子节点的指针。叶子节点没有左右子节点,其值为 null。

输出格式

对于每个节点,输出其到最近的叶子节点的路径长度。

解题思路

本题可以通过递归解决。首先,对于每个节点,可以通过递归找到其左右子树中离该节点最近的叶子节点。然后,将两个子树中离该节点最近的叶子节点的路径长度取最小值,并加上该节点到左右子树中离该节点最近的叶子节点的距离,即为该节点到最近的叶子节点的路径长度。

代码实现
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
        left_depth = self.minDepth(root.left)
        right_depth = self.minDepth(root.right)
        if left_depth == 0 or right_depth == 0:
            return max(left_depth, right_depth) + 1
        return min(left_depth, right_depth) + 1
总结

这道题目主要考察了递归算法的思想,我们需要找到子问题的解,然后将子问题的解组合起来得到原问题的解。在实现过程中,需要注意终止条件和对于空节点的处理。