Swift - LeetCode - 二叉树的最小深度

题目

二叉树的最小深度

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

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

说明:

叶子节点是指没有子节点的节点。

示例:

给定二叉树 [3,9,20,null,null,15,7],   
    3
   / \
  9  20
    /  \
   15   7
返回它的最小深度  2.

思路:

很多人写出的代码都不符合 1,2 这个测试用例,是因为没搞清楚题意

题目中说明:叶子节点是指没有子节点的节点,这句话的意思是 1 不是叶子节点

题目问的是到叶子节点的最短距离,所以所有返回结果为 1 当然不是这个结果

另外这道题的关键是搞清楚递归结束条件

叶子节点的定义是左孩子和右孩子都为 null 时叫做叶子节点
当 root 节点左右孩子都为空时,返回 1
当 root 节点左右孩子有一个为空时,返回不为空的孩子节点的深度
当 root 节点左右孩子都不为空时,返回左右孩子较小深度的节点值

代码:
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     public var val: Int
 *     public var left: TreeNode?
 *     public var right: TreeNode?
 *     public init(_ val: Int) {
 *         self.val = val
 *         self.left = nil
 *         self.right = nil
 *     }
 * }
 */
class Solution {
    func minDepth(_ root: TreeNode?) -> Int {
        guard let root = root else {
        return 0
      }
        
        if root.left == nil && root.right == nil {
            return 1
        }
        
        let m1 = minDepth(root.left)
        let m2 = minDepth(root.right)
        
        if root.left == nil || root.right == nil {
            return m1 + m2 + 1
        }
      
        return min(m1, m2) + 1
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 何风欲暖何水寒,暮光薄,云影浮动。何物动人影相随,物依旧,入梦景。 不辞天涯共海角,纵笙箫,归心若有。烟月方恨初见...
    页行文阅读 209评论 2 1
  • 28岁,他说想来深圳看看;26岁,我说28岁离开深圳。 人总是在不同的阶段做不同的打算,一旦选择就要承担,结果也许...
    最狸的一只阅读 312评论 0 3
  • 春风带来了凛冬的呼啸,却带走了凛冬的严寒。这个季节的变化,让人的思绪变得越发萌然。点点星火,亦让人的身体感到...
    tensorfly阅读 216评论 0 0
  • 王国维的《人间词话》是我为数不多读了又读的书之一,每次阅读都不禁叹服于静安用语之简洁论述之精辟。此次所得之一在于...
    江东20阅读 1,383评论 8 25