LeetCode第111题:二叉树的最小深度
问题描述
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最小深度 2.
解题思路
刚开始想得很简单,不就是类比求树的深度,空树返回0,非空树返回左右子树最小深度+1就ok吗?
如果你这么想,那真的too young too simple,sometimes naive。
因为很明显这种思路忽略了根节点只有左子树或者右子树的情况,此种情况下树的最小深度按第一种方法 求得为1,
但是题目所求的是到叶子节点啊同学们,都为nullptr了哪里还叫叶子节点?
正确的递归思路如下:
空树返回0;
左右子树不为空,返回左子树最小深度和右子树最小深度的较小值+1;
左子树不为空,返回左子树最小深度+1;
右子树不为空,返回右子树最小深度+1;
左右子树均为空,返回1;
C++代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int minDepth(TreeNode* root) {
//空指针深度为0
if(root==nullptr)
return 0;
//左右子树均不为空
//左右最小深度+1
if(root->left!=nullptr&&root->right!=nullptr){
int leftDepth=minDepth(root->left);
int rightDepth=minDepth(root->right);
return leftDepth<rightDepth?leftDepth+1:rightDepth+1;
}
//左子树不为空,右子树为空
//左子树最小深度+1
if(root->left!=nullptr&&root->right==nullptr){
return minDepth(root->left)+1;
}
//左子树为空,右子树不为空
//右子树最小深度+1
if(root->left==nullptr&&root->right!=nullptr){
return minDepth(root->right)+1;
}
//左右子树均为空
//返回1
if(root->left==nullptr&&root->right==nullptr){
return 1;
}
}
};
运行结果

LeetCode第111题:二叉树的最小深度的更多相关文章
- [LC]111题 二叉树的最小深度 (递归)
①题目 给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明: 叶子节点是指没有子节点的节点. 示例: 给定二叉树 [3,9,20,null,null,15 ...
- 【leetcode 简单】第二十七题 二叉树的最小深度
给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明: 叶子节点是指没有子节点的节点. 示例: 给定二叉树 [3,9,20,null,null,15,7], ...
- 【LeetCode】111. 二叉树的最小深度
111. 二叉树的最小深度 知识点:二叉树,递归 题目描述 给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明:叶子节点是指没有子节点的节点. 示例 输入 ...
- Java实现 LeetCode 111 二叉树的最小深度
111. 二叉树的最小深度 给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明: 叶子节点是指没有子节点的节点. 示例: 给定二叉树 [3,9,20,nu ...
- leetcode 111. 二叉树的最小深度
题目描述: 给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明: 叶子节点是指没有子节点的节点. 示例: 给定二叉树 [3,9,20,null,null, ...
- Leecode刷题之旅-C语言/python-111二叉树的最小深度
/* * @lc app=leetcode.cn id=111 lang=c * * [111] 二叉树的最小深度 * * https://leetcode-cn.com/problems/minim ...
- [LeetCode] Minimum Depth of Binary Tree 二叉树的最小深度
Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the shor ...
- LeetCode 二叉树的最小深度
计算二叉树的最小深度.最小深度定义为从root到叶子节点的最小路径. public class Solution { public int run(TreeNode root) { if(root = ...
- 【easy】111. Minimum Depth of Binary Tree求二叉树的最小深度
求二叉树的最小深度: /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; ...
- LeetCode OJ:Minimum Depth of Binary Tree(二叉树的最小深度)
Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the shor ...
随机推荐
- VueJs路由跳转——vue-router的使用
对于单页应用,官方提供了vue-router进行路由跳转的处理,本篇主要也是基于其官方文档写作而成. 安装 基于传统,我更喜欢采用npm包的形式进行安装. npm install vue-router ...
- java-05String课堂练习
1.阅读以下代码查看输出结果 public class StringPool { public static void main(String args[]) { String s0="He ...
- windowsError:32
Traceback (most recent call last): File "/usr/lib/python2.7/logging/handlers.py", line 78, ...
- 微信小程序 报错Setting data field "variableName" to undefined is invalid.
Setting data field "variableName" to undefined is invalid. 将数据字段“variableName”设置为未定义是无效的. ...
- 查看.Net Framework版本号
目录 摘要 .NET Framework 的版本 确定计算机上安装的 .NET Framework 版本 补充几个查看.Net Framework版本号 概要 本文描述如何确定计算机上安装的 Micr ...
- Python获取%appdata%路径的方法
import osimport sys import winreg print(os.name)print(sys.getdefaultencoding())print(sys.version)pri ...
- java继承 子类重写父类方法
package com.addd; //多态 public class Sld { private String name = "zhangsan"; public Sld() { ...
- Python模块之: ConfigParser 配置文件读取
Python模块之: ConfigParser 配置文件读取 ConfigParser用于读写类似INI文件的配置文件,配置文件的内容可组织为组,还支持多个选项值(option-value)类型. ...
- Even uploading a JPG file can lead to Cross-Site Content Hijacking (client-side attack)!
Introduction: This post is going to introduce a new technique that has not been covered previously i ...
- Java堆初始大小的建议值
摘自:<Java Performance>第三章 Initial Heap Space Size Configuration This section describes how to u ...