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

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

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

示例:

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

    3/ \9  20/  \15   7

返回它的最小深度  2.

解法一:利用递归。与求二叉树最大深度类似,只不过只是将最大深度换成了最小深度。

class Solution {
public:int minDepth(TreeNode* root) {//递归的方法//递归的终止条件if(root == NULL) return 0;if(root->left == NULL)return minDepth(root->right) + 1;if(root->right == NULL)return minDepth(root->left) + 1;//当前层的逻辑int left = minDepth(root->left) + 1;int right = minDepth(root->right) + 1;//下探到下一层return left >= right ? right : left;//清理当前状态}
};
class Solution {
public:int minDepth(TreeNode* root) {//递归的方法//递归的终止条件if(root == NULL) return 0;//当前层的逻辑int left = minDepth(root->left);int right = minDepth(root->right);if(root->left == NULL || root->right == NULL)return left == 0 ? right + 1 : left + 1;//下探到下一层return min(left, right) + 1;//清理当前状态}
};

解法二:采用迭代,注意这里和二叉树的层序遍历,以及求二叉树的层序遍历的迭代法一样,只需要注意,如果有一个节点的左右孩子都没有,则可以立刻返回。

class Solution {
public:int minDepth(TreeNode* root) {//采用递归的方法时,一旦递归到有一个节点是叶子节点,即可返回int deep = 0;queue<TreeNode*> que;if(root) que.push(root);while(!que.empty()) {deep++;int length = que.size();while(length--) {TreeNode* tmp = que.front();que.pop();if(tmp->left == NULL && tmp->right == NULL) return deep;if(tmp->left) que.push(tmp->left);if(tmp->right) que.push(tmp->right);}}return deep;}
};

LeetCode第111题解析相关推荐

  1. [Leetcode][第111题][JAVA][BFS][二叉树的最小深度][BFS][递归]

    [问题描述][简单] [解答思路] 1. 递归 自下而上 基本情况/结束条件 : 叶子节点的定义是左孩子和右孩子都为 null 时叫做叶子节点 当 root 节点左右孩子都为空时,返回 1 当 roo ...

  2. 利用二叉链表创建二叉树_利用递归解LeetCode第111题:二叉树的最小深度

    题目描述(难度简单) 给定一个二叉树,找出其最小深度.最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明: 叶子节点是指没有子节点的节点. 示例: 给定二叉树 [3,9,20,null,n ...

  3. LeetCode第874题解析

    机器人在一个无限大小的网格上行走,从点 (0, 0) 处开始出发,面向北方.该机器人可以接收以下三种类型的命令: -2:向左转 90 度 -1:向右转 90 度 1 <= x <= 9:向 ...

  4. LeetCode第78题解析

    给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: nums = [1,2,3] 输出: [[3],[1],[2],[1,2, ...

  5. [Leetcode][第104题][JAVA][二叉树的最大深度][递归][BFS]

    [问题描述][简单] [解答思路] 1. 递归 终止条件/基本情况 root ==null 递推关系 max(l,r)+1 时间复杂度:O(N) 空间复杂度:O(height) class Solut ...

  6. 蓝桥杯第十二届真题解析

    目录 前言 考试技巧 真题解析 第一题 (ASC) 第二题 (卡片) 第三题 (直线) 第四题 (货物摆放) 第五题 (路径) 第六题 (时间显示) 第七题 (最少砝码) 第八题 (杨辉三角形) 第九 ...

  7. leetcode分类刷题笔记

    leetcode分类刷题笔记--基于python3 写在前面 1.做题如果实在想不出时间复杂度比较优的解法,可以先写出暴力解法,尝试在其基础上优化 2.排序.双指针.二分等--经常可以优化时间复杂度 ...

  8. shell编程1到10求和_重磅|郑州市第四届中小学创意编程暨智能设计大赛初中组真题解析(下)...

    温馨提示 : 图片点击可放大噢! 判断题01 考察点:变量 解析:答案是A,正确. 新建变量时,勾选仅适用于当前角色是指在本角色内定义的变量,只在本角色程序范围内使用有效:勾选适用与所有角色是指此变量 ...

  9. 蓝桥杯练习系统习题-历年真题解析1(完整版)

    文章推荐 精选java等全套学习资源 精选java电子图书资源 精选大数据学习资源 java项目练习精选 蓝桥杯练习系统习题-历年真题解析1 题目搜索方式:Ctrl+F--> 输入题目名称-&g ...

最新文章

  1. java 之 语言基础
  2. pytorch学习:xavier分布和kaiming分布
  3. Mybatis动态的添加删除列
  4. 解决VS2010复制代码中文乱码的问题
  5. sdut 活动选择问题
  6. 作者:李海林,博士,华侨大学信息管理系副教授、硕士生导师。
  7. python plotly spyder显示_Python绘图工具Plotly的简单使用
  8. 生产者消费者问题 操作系统
  9. 电脑k歌软件_别否认!你就是在K歌软件里偷偷出道的年轻人
  10. gaia引擎分析(一)资源管理
  11. QQ登陆功能的实现2
  12. 获取手机唯一标识插件_非常强大的几款手机浏览器,适用于某些黑科技功能
  13. 拓端tecdat|使用R语言进行机制检测的隐马尔可夫模型HMM
  14. python成员变量_Python——成员变量
  15. oracle spatial 数据导入_Oracle Spatial导入shp数据
  16. 计算机鼠标样式,鼠标指针
  17. qgis打开shp数据_关于QGIS打开SHP文件属性表乱码
  18. 如何把word ppt 思维导图这类文件转化为高清晰度的图片(要干货只看粗体黑字)...
  19. 硬盘分区无法打开,提示“文件或目录损坏且无法读取”
  20. X11 xcb 交叉编译

热门文章

  1. gitlab CI/CD自动化部署
  2. 使用parted命令为磁盘扩容
  3. visualboyadvance滤镜_GBA/GBC模拟器VisualBoyAdvance图文使用教程
  4. 百度云管家下载大文件速度慢的解决办法
  5. Ubuntu安装桌面环境GUI
  6. 电脑维修不求人:电脑常见故障维修大全及解决方法
  7. 无线串口服务器 moxa 稳定,moxa串口服务器通讯设置参数
  8. 作为一名开发者,这个七夕你(打算)怎么过?
  9. 我的免费空间--主机屋
  10. docx4j 将word2007版转为pdf