解法一:递归 遇到叶子节点不递归,否则接着往子树递归,每次递归层数加1

要确定的是,一定要保证初始输入的节点是有子节点的。因为可能出现只有单子树的情况,所以要先确认这种情况。

具体过程:

1、分析初始条件

空指针:深度为0

单节点:深度为1

1、先确定递归基本条件:

节点指针为空,说明深度为0,返回深度0;

如果到了叶节点,说明其左右两节点指针就是空,也就是在深度为0的基础上加上该节点所在的一层,即1+调用空指针的递归函数

2、找最近的叶节点,也就是左右指针都是空的叶节点的时候。

 /**
* 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 ;//root节点是空节点,深度为0
if(!root->right && !root->left) return ;//只有一个节点,深度就是1
if(!root->left){//左节点空,右节点非空,在右子树里面找最近的叶子节点
return +minDepth(root->right);
}
if(!root->right){//右节点空,左节点非空,在左子树里面找最近的叶子节点
return +minDepth(root->left);
}
//两个节点都非空,那就继续迭代下一层
return +min(minDepth(root->left),minDepth(root->right));
}
};

方法二:

BFS,广度优先搜索 每次把一层节点压入队列,同时判断这些节点中是否含有叶子节点(即左右指针都为空),若有,说明找到了最近的那个叶子节点,返回层数。

 class Solution {
public:
int minDepth(TreeNode* root) {
if(root==NULL) return ; //判空
queue<pair<TreeNode*,int>> que; //把节点和所在的层数绑定
que.push(make_pair(root,)); //压入根节点,层数为1
while()
{
TreeNode* node=que.front().first; //当前节点
int level=que.front().second; //层数
que.pop();
if (!node->left && !node->right) return level;//遇到叶子节点
if(node->left) //压入左节点
que.push(make_pair(node->left,level+));
if(node->right)//压入右节点
que.push(make_pair(node->right,level+));
}
}
};

树、递归、广度优先搜索(BFS)————二叉树的最小深度的更多相关文章

  1. 深度优先搜索DFS和广度优先搜索BFS简单解析(新手向)

    深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每个点仅被访问一次,这个过程就是图的遍历.图的遍历常用的有深度优先搜索和广度优先搜索,这两者对于有向图和无向图 ...

  2. 深度优先搜索DFS和广度优先搜索BFS简单解析

    转自:https://www.cnblogs.com/FZfangzheng/p/8529132.html 深度优先搜索DFS和广度优先搜索BFS简单解析 与树的遍历类似,图的遍历要求从某一点出发,每 ...

  3. 利用广度优先搜索(BFS)与深度优先搜索(DFS)实现岛屿个数的问题(java)

    需要说明一点,要成功运行本贴代码,需要重新复制我第一篇随笔<简单的循环队列>代码(版本有更新). 进入今天的主题. 今天这篇文章主要探讨广度优先搜索(BFS)结合队列和深度优先搜索(DFS ...

  4. 【数据结构与算法Python版学习笔记】图——词梯问题 广度优先搜索 BFS

    词梯Word Ladder问题 要求是相邻两个单词之间差异只能是1个字母,如FOOL变SAGE: FOOL >> POOL >> POLL >> POLE > ...

  5. 广度优先搜索 BFS 学习笔记

    广度优先搜索 BFS 学习笔记 引入 广搜是图论中的基础算法之一,属于一种盲目搜寻方法. 广搜需要使用队列来实现,分以下几步: 将起点插入队尾: 取队首 \(u\),如果 $u\to v $ 有一条路 ...

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

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

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

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

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

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

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

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

随机推荐

  1. JS 九九运算表

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. Day 14 匿名函数

    递归之二分法 def sc_func(num,lis): lis_len=int(len(lis)/2) binary_num=lis[lis_len] # print(binary_num) if ...

  3. apache https部署

    1.生成证书,直接在阿里云或腾讯云中生成此处不再介绍 2.在httpd.conf中取消#LoadModule ssl_module modules/mod_ssl.so的注释 3.开启httpd-ss ...

  4. alsa文章

    http://blog.csdn.net/azloong/article/details/6140824 http://blog.csdn.net/tianshuai1111/article/deta ...

  5. Linux中的gpio口使用方法

    Linux中的IO使用方法 应该是新版本内核才有的方法.请参考:./Documentation/gpio.txt文件 提供的API:驱动需要包含 #include <linux/gpio.h&g ...

  6. python中的and、or 操作符

    在python中 非空 非零的数都为真 1. 其"and"操作符返回的结果是决定表达式结果的值:两边条件都为真则结果为真,有一假则为假 1) 当and两边条件为“真”时,返回的是a ...

  7. idea debug打得断点第一次可以进入,第二次不能进入

  8. swift菜鸟入门视频教程-09-类和结构体

    本人自己录制的swift菜鸟入门,欢迎大家拍砖,有什么问题能够在这里留言. 主要内容: 类和结构体对照 结构体和枚举是值类型 类是引用类型 类和结构体的选择 集合(collection)类型的赋值与复 ...

  9. SVN打tag

          SVN打tag是一个非经常常使用的功能,要谈打tag,还得从SVN官方推荐的文件夹结构说起.SVN官方推荐在一个版本号库的根文件夹下先建立trunk.branches.tags这三个文件夹 ...

  10. n个整数全排列的递归实现(C++)

    全排列是很经常使用的一个小算法,以下是n个整数全排列的递归实现,使用的是C++ #include <iostream> using namespace std; int n = 0; vo ...