第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

LeetCode 111. 二叉樹(shù)的最小深度 | Python

標(biāo)簽:
Python 算法

111. 二叉树的最小深度


题目


给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

说明: 叶子节点是指没有子节点的节点。

示例:

给定二叉树 [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回它的最小深度 2.

解题思路


思路: DFS、BFS

审题,题目要求给定二叉树的最小深度。

最小深度: 指的是从根节点到叶子节点的最短路径上节点数量。

叶子节点: 指的是没有左右子节点的节点。

那么我们这里考虑从根节点出发,使用 DFS、BFS 的思路进行搜索。

DFS

先看使用 DFS(深度优先搜索)的方法,具体做法如下:

  • 根节点为空,返回 0;
  • 如果根节点不为空,需要判断左右子节点:
    • 左右子节点都为空,那么返回 1;
    • 左右子节点其中一个为空,那么返回不为空子节点的最小深度;
    • 左右子节点均不为空,返回其中较小深度的值。

具体的代码见【代码实现 # DFS】

BFS

这里,也可以使用 BFS(广度优先搜索)的方法,我们使用 BFS 方法时,是逐层去搜索的,那么我们只要发现某一层中,某个节点不存在子节点时,那么也就意味着从根节点到当前节点是最短路径。

具体的代码见【代码实现 # BFS】

代码实现


# DFS
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def minDepth(self, root: TreeNode) -> int:
        # 根节点为空
        if not root:
            return 0
        # 根节点不为空,分别讨论左右子节点
        depth = 1

        # 根节点不为空,但不存在左右子节点,返回 1
        if not root.left and not root.right:
            return 1
        # 不存在右子节点,返回不为空的左子节点最小深度
        elif not root.right:
            depth += self.minDepth(root.left)
        # 返回不为空的右子节点最小深度
        elif not root.left:
            depth += self.minDepth(root.right)
        # 左右子节点均不为空,返回较小深度
        else:
            left_depth = self.minDepth(root.left)
            right_depth = self.minDepth(root.right)
            depth += min(left_depth, right_depth)

        return depth

# BFS
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def minDepth(self, root: TreeNode) -> int:
        if not root:
            return 0

        from collections import deque
        queue = deque()
        queue.append(root)

        depth = 1

        while queue:
            # 逐层搜索,先记录每层节点数
            size = len(queue)
            for _ in range(size):
                node = queue.popleft()
                # 当前节点不存在子节点,那么当前节点在最小路径上
                if not node.left and not node.right:
                    return depth
                # 其中一个节点为空,返回不为空节点的最小深度
                elif not node.right:
                    queue.append(node.left)
                elif not node.left:
                    queue.append(node.right)
                # 左右子节点都不会空,返回其中较小深度
                else:
                    queue.append(node.left)
                    queue.append(node.right)
                
            depth += 1

实现结果


实现结果 | DFS

实现结果 | BFS

點(diǎn)擊查看更多內(nèi)容
1人點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶(hù)
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專(zhuān)欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消