📌  相关文章
📜  在二叉树中找到最近的叶子(1)

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

在二叉树中找到最近的叶子

问题描述

给定一个二叉树,找到根节点到最近的叶子节点的最短距离。

解法

我们可以使用BFS来解决这个问题。我们从根节点开始进行BFS,同时记录每个节点的深度和是否为叶子节点。当我们遇到第一个叶子节点时,返回它的深度即可。

如果我们没有找到叶子节点,我们可以继续往下走,直到找到叶子节点为止。

代码实现
from collections import deque

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def minDepth(root: TreeNode) -> int:
    if not root:
        return 0

    queue = deque([(root, 1)])
    while queue:
        node, depth = queue.popleft()

        if not node.left and not node.right:
            return depth

        if node.left:
            queue.append((node.left, depth + 1))

        if node.right:
            queue.append((node.right, depth + 1))
测试示例

测试用例1:

输入:

    1
   / \
  2   3
 / \
4   5

输出: 2

解释:根节点到最近的叶子节点的路径为1 -> 2 -> 4,其深度为2。

测试用例2:

输入:

    1
   /
  2
 /
3

输出: 3

解释:根节点到最近的叶子节点的路径为1 -> 2 -> 3,其深度为3。