leetcode代码记录(二叉树的最小深度

简介: leetcode代码记录(二叉树的最小深度

1. 题目:

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

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

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

示例 1:

输入:root = [3,9,20,null,null,15,7]

输出:2

示例 2:

输入:root = [2,null,3,null,4,null,5,null,6]

输出:5

2. 我的代码:

# Definition for a binary tree node.
# 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: Optional[TreeNode]) -> int:
        # 后序遍历
        # 递归
        def minDep(node):
            # 终止条件
            if node == None:
                return 0
            left_minDep = minDep(node.left)
            right_minDep = minDep(node.right)
            if left_minDep == 0 or right_minDep == 0:
                return 1 + left_minDep + right_minDep
            else:
                return 1 + min(left_minDep, right_minDep)

        return minDep(root)

这个题继续使用求解高度的后序遍历求解,比较方便。

首先确定终止条件:叶子节点时返回;然后确定后序遍历的逻辑,但是,存在的一个bug是,最小深度的定义为从叶子节点到根节点的最小路径。所以,应当排除掉有一边是None的节点,不然都会被这一侧同化成0。统一返回1 + left_minDep + right_minDep即可。

对于叶子节点或者两侧都非空的节点,返回1 + min(left_minDep, right_minDep)即可。

目录
相关文章
|
4天前
|
机器学习/深度学习
leetcode代码记录(旋转图像
leetcode代码记录(旋转图像
9 0
|
4天前
|
算法
leetcode代码记录(全排列 II
leetcode代码记录(全排列 II
13 4
|
4天前
|
算法
leetcode代码记录(全排列
leetcode代码记录(全排列
12 1
|
4天前
|
索引
leetcode代码记录(Z 字形变换
leetcode代码记录(Z 字形变换
11 1
|
4天前
leetcode代码记录(最长回文子串
leetcode代码记录(最长回文子串
9 2
|
4天前
leetcode代码记录(回文数
leetcode代码记录(回文数
12 1
|
4天前
|
算法
leetcode代码记录(寻找两个正序数组的中位数
leetcode代码记录(寻找两个正序数组的中位数
13 2
|
4天前
leetcode代码记录(两数之和
leetcode代码记录(两数之和
11 1
|
4天前
|
索引
leetcode代码记录(最长公共子序列
leetcode代码记录(最长公共子序列
7 0
|
4天前
|
索引
leetcode代码记录(最长重复子数组
leetcode代码记录(最长重复子数组
12 0