题目:

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

注意最小深度的定义!

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

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

一、递归法

时间复杂度:O(n)。需要遍历每一个节点。

空间复杂度:最差情况下,当一棵树是非平衡树的时候,例如每个节点都只有一个孩子,树的高度为n,会产生n次递归调用,因此栈的空间开销是O(N)。但在最好情况下,树的高度只有log(n),栈的空间开销是O(log(N))。

/**
* 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) {
if (root == NULL)
return ; if( (root->left == NULL) && (root->right == NULL) )
return ; int depthL = INT_MAX;
int depthR = INT_MAX; if(root->left != NULL)
depthL = minDepth(root->left);
if(root->right != NULL)
depthR = minDepth(root->right); int depth = min( depthL, depthR ) + ;
return depth;
}
};

二、宽度优先搜索

使用FIFO的数据结构queue存储树节点,从而实现对树节点自上而下的遍历。

时间复杂度:O(N)。完全二叉树的情况下,需要对 n/2 个节点进行遍历。非平衡树的情况下,例如每个节点只有1个孩子节点,则需要遍历所有节点。

空间复杂度:O(N)。完全二叉树的情况下,queue容器中最多需要存储 n/2 个节点。非平衡树的情况下,例如每个节点只有1个孩子节点,则queue容器中最多只存储1个节点。

/**
* 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) {
if(root == NULL)
return ; queue<TreeNode*> q;
q.push(root);
int depth = ; while(!q.empty()) {
int len = q.size(); for(int i = ; i < len; ++i) {
TreeNode* node = q.front();
q.pop(); int num = ; if(node->left != NULL) {
q.push(node->left);
num += ;
}
if(node->right != NULL) {
q.push(node->right);
num += ;
} if(num == )
return depth + ;
}
depth++;
}
return depth;
}
};

【Leetcode】二叉树的最小深度的更多相关文章

  1. LeetCode 二叉树的最小深度

    计算二叉树的最小深度.最小深度定义为从root到叶子节点的最小路径. public class Solution { public int run(TreeNode root) { if(root = ...

  2. [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 ...

  3. 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 ...

  4. leetcode 111. 二叉树的最小深度

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

  5. Java实现 LeetCode 111 二叉树的最小深度

    111. 二叉树的最小深度 给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明: 叶子节点是指没有子节点的节点. 示例: 给定二叉树 [3,9,20,nu ...

  6. 【LeetCode】111. 二叉树的最小深度

    111. 二叉树的最小深度 知识点:二叉树,递归 题目描述 给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明:叶子节点是指没有子节点的节点. 示例 输入 ...

  7. Leecode刷题之旅-C语言/python-111二叉树的最小深度

    /* * @lc app=leetcode.cn id=111 lang=c * * [111] 二叉树的最小深度 * * https://leetcode-cn.com/problems/minim ...

  8. lintcode : 二叉树的最小深度

    题目: 二叉树的最小深度 给定一个二叉树,找出其最小深度. 二叉树的最小深度为根节点到最近叶子节点的距离. 样例 给出一棵如下的二叉树: 1 /     \ 2       3 /    \ 4    ...

  9. lintcode 155 二叉树的最小深度

    二叉树的最小深度   描述 笔记 数据 评测 给定一个二叉树,找出其最小深度. 二叉树的最小深度为根节点到最近叶子节点的距离. 您在真实的面试中是否遇到过这个题? Yes 哪家公司问你的这个题? Ai ...

  10. 【easy】111. Minimum Depth of Binary Tree求二叉树的最小深度

    求二叉树的最小深度: /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; ...

随机推荐

  1. C#动态调用带有SoapHeader验证的WebServices

    http://blog.csdn.net/u012995964/article/details/54573143 本文记录C#中通过反射动态的调用带有SoapHeader验证的WebServices服 ...

  2. 常用邮件SMTP POP3服务器地址大全

    #阿里云邮箱(mail.aliyun.com): POP3服务器地址:pop3.aliyun.com(SSL加密端口:995:非加密端口:110) SMTP服务器地址:smtp.aliyun.com( ...

  3. JavaScript中:地址引用的特性,导致静态初始值被修改

    问题分类 JavaScript,值引用,地址引用 问题描述 开发过程中,服务端将静态配置数据从mysql数据库中读取到内存中,方便调用. 在实现流派功能时,需从数据库中读取流派种类数据到内存中,由于其 ...

  4. ubuntu 安装 Anaconda2和3的tips

    Anaconda 2 3 安装tips 安装anaconda2 我们要下载Anaconda2-4.3.0-Linux-x86_64.sh安装文件 下载好之后,在文件路径下执行以下命令: bash An ...

  5. VeryNginx故障排除

    在安装和使用 VeryNginx 的过程中可能会遇到一些问题,下面列举了常见的问题及对应的解决方案,供参考. Q: run "python instal.py install all&quo ...

  6. mysql复制表结构,复制表数据

    MYSQL 复制表 show create table table_name:查看表的建表语句.该语句包含了原数据表的结构,索引等. 使用 SHOW CREATE TABLE 命令获取创建数据表(CR ...

  7. JVM常用虚拟机命令汇总

    title: JVM常用虚拟机命令汇总 comments: false date: 2019-07-22 11:45:33 description: 总结一下常用的JVM虚拟机启动命令. catego ...

  8. day04-jQuery

    jQ宗旨:write less do more jq是js的框架,底层封装了js代码. jq引入: <script type="text/javascript" src=&q ...

  9. Redis重新配置集群

    如果要重新配置集群,先停止集群,然后将cluster-config-file配置的所有文件删除,再重新启动集群,就可以重新配置集群 如果提示[ERR] Node 192.168.2.17:7000 i ...

  10. [PyQt5]动态显示matplotlib作图(一)

    完整实例 import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QMenu, QVBoxLayout, QSizePoli ...