当前位置:   article > 正文

⭐算法入门⭐《二叉树》简单05 —— LeetCode 111. 二叉树的最小深度

⭐算法入门⭐《二叉树》简单05 —— LeetCode 111. 二叉树的最小深度

一、题目

1、题目描述

  给定一个二叉树,找出其最小深度。二叉树的深度为根节点到最短距离的叶子节点的最长路径上的节点数。
  样例输入: [3,9,20,null,null,15,7]
  样例输出: 2

2、基础框架

  • C语言 版本给出的基础框架代码如下:
int minDepth(struct TreeNode* root){
}
  • 1
  • 2

3、原题链接

LeetCode 111. 二叉树的最小深度

二、解题报告

1、思路分析

  树的最小深度的定义:左子树 和 右子树 的深度中的小者 加 一。直接递归求解

2、时间复杂度

  由于需要把所有结点都遍历一遍,所以时间复杂度为 O ( n ) O(n) O(n)

3、代码详解

int min(int a, int b) {
    return a < b ? a : b;
}

int minDepth(struct TreeNode* root){
    if(root == NULL) {
        return 0;                     // (1)
    }
    if(root->left && root->right) {   // (2)
        return min( minDepth(root->left), minDepth(root->right) ) + 1;
    }else if(root->left) {            // (3)
        return minDepth(root->left) + 1;
    }else if(root->right) {           // (4)
        return minDepth(root->right) + 1;
    }
    return 1;                         // (5)
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • ( 1 ) (1) (1) 空树深度为0;
  • ( 2 ) (2) (2) 左右子树都存在,则找其中小者加一;
  • ( 3 ) (3) (3) 只有左子树,则左子树深度加一;
  • ( 4 ) (4) (4) 只有右子树,则右子树深度加一;
  • ( 5 ) (5) (5) 否则,为叶子结点,深度就为 1;

三、本题小知识

  递归时处理二叉树问题很好的手段。


四、加群须知

  相信看我文章的大多数都是「 大学生 」,能上大学的都是「 精英 」,那么我们自然要「 精益求精 」,如果你还是「 大一 」,那么太好了,你拥有大把时间,当然你可以选择「 刷剧 」,然而,「 学好算法 」,三年后的你自然「 不能同日而语 」
  那么这里,我整理了「 几十个基础算法 」 的分类,点击开启:

推荐阅读
相关标签