LeetCode Minimum Depth of Binary Tree 找最小深度(返回最小深度)
题意:找到离根结点最近的叶子结点的那一层(设同一层上的结点与根结点的距离相等),返回它所在的层数。
方法有:
1、递归深度搜索
2、层次搜索
方法一:递归(无优化)
/**
* Definition for binary tree
* 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== ) //针对树根
return ;
if(root->left==&&root->right==) //是叶子,立即返回1
return ;
int zuo,you,com;
if(root->left!=&&root->right!=){ //左右孩子均存在
zuo=minDepth(root->left);
you=minDepth(root->right);
return zuo<=you?++zuo:++you;
}
else{
if(root->left!=&&root->right==){ //只有左孩子,那么只需要沿着左孩子方向搜索
com=minDepth(root->left);
}
else{ //即(root->left==0&&root->right!=0) 只有右孩子,那么只需要沿着左孩子方向搜索
com=minDepth(root->right);
}
return ++com;
}
}
};
思路:递归寻找叶子结点。
注意:如果一个结点只有一个孩子,不能调用两次函数来分别搜索左右子树,不然空的一边会返回0,那么结果就错了。
方法二:递归(稍微优化)
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int mini(TreeNode *root) {
if( root->left== && root->right== ) //叶子结点,返回
return ;
int zuo,you,com;
if(root->left!= && root->right!= ){ //左右孩子均存在
if( root->left->left== && root->left->right== ){ //左孩子是叶子,右孩子不一定是叶子,无必要再搜索右孩子了
zuo=mini( root->left );
return ++zuo;
}
else if( root->right->left== && root->right->right== ){ //右孩子是叶子,左孩子不一定是叶子,无必要再搜索左孩子了
you=mini( root->right );
return ++you;
}
else{ //左右孩子均不是叶子,都需要继续向下搜索
zuo=mini( root->left );
you=mini( root->right );
return zuo<=you?++zuo:++you;
}
}
else{ //只有一个孩子
if(root->left!=) //只有左孩子
com=mini( root->left );
else //只有右孩子
com=mini( root->right );
return ++com;
}
}
int minDepth(TreeNode *root) {
if( root== ) //只针对空树
return ;
return mini(root);
}
};
思想是:若一个结点有两个孩子,而其中一个孩子是叶子,而另一个不是,那么就无需再搜索那个“不是叶子”的孩子了,因为它算出来的深度肯定比那个叶子的长。(具体自己画图领会)
吐槽:只是优化这么一点就需要考虑挺多东西。怪自己整体把握能力偏弱,总是需要先把代码打出来,修改,再修改才能解决。若能做到还没打代码之前就大概掌控整体结构,打出来就快多了。
方法三:层次遍历(暂时没空写)
LeetCode Minimum Depth of Binary Tree 找最小深度(返回最小深度)的更多相关文章
- LeetCode:Minimum Depth of Binary Tree,Maximum Depth of Binary Tree
LeetCode:Minimum Depth of Binary Tree Given a binary tree, find its minimum depth. The minimum depth ...
- LeetCode: Minimum Depth of Binary Tree 解题报告
Minimum Depth of Binary Tree Given a binary tree, find its minimum depth. The minimum depth is the n ...
- [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] 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 - Minimum Depth of Binary Tree
题目: Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the ...
- leetcode:Minimum Depth of Binary Tree【Python版】
1.类中递归调用添加self: 2.root为None,返回0 3.root不为None,root左右孩子为None,返回1 4.返回l和r最小深度,l和r初始为极大值: # Definition f ...
- leetcode Minimum Depth of Binary Tree python
# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = ...
- Minimum Depth of Binary Tree,求树的最小深度
算法分析:递归和非递归两种方法. public class MinimumDepthofBinaryTree { //递归,树的最小深度,就是它左右子树的最小深度的最小值+1 public int m ...
- [LeetCode] 111. Minimum Depth of Binary Tree ☆(二叉树的最小深度)
[Leetcode] Maximum and Minimum Depth of Binary Tree 二叉树的最小最大深度 (最小有3种解法) 描述 解析 递归深度优先搜索 当求最大深度时,我们只要 ...
随机推荐
- 获取app下载链接
https://itunes.apple.com/cn/app/id1398635899?mt=8 只需要更改其中的id就可以了
- 第三方登录---微信(使用laravel插件)
转发: https://www.jianshu.com/p/7be757655814 TP框架: http://www.php.cn/php-weizijiaocheng-363509.html
- hdu 1847 Good Luck in CET-4 Everybody!(巴什博弈)
Good Luck in CET-4 Everybody! HDU - 1847 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Ci ...
- 清北刷题冲刺 11-03 a.m
纸牌 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...
- [转]黑幕背后的__block修饰符
http://www.cocoachina.com/ios/20150106/10850.html 我们知道在Block使用中,Block内部能够读取外部局部变量的值.但我们需要改变这个变量的值时,我 ...
- 牛客网NOIP赛前集训营-提高组(第四场)B题 区间
牛客网NOIP赛前集训营-提高组(第四场) 题目描述 给出一个序列 a1, ..., an. 定义一个区间 [l,r] 是好的,当且仅当这个区间中存在一个 i,使得 ai 恰好等于 al, al+1, ...
- redux中createStore方法的默认参数
一般使用方法: createStore(reducer, applyMiddleware(thunk)) 传递默认参数: createStore(reducer, defaultState, appl ...
- Codeforces Round #364 (Div. 2) B
Description Vasya has the square chessboard of size n × n and m rooks. Initially the chessboard is e ...
- Linux定时清理30天前的Tomcat日志脚本
一.在tomcat的log路径下新建.sh脚本文件clean.sh,内容如下:#!/bin/bashlogs_path="/mnt/tomcat/apache-tomcat-8.5.23/l ...
- Jenkins +Maven+Tomcat+SVN +Apache项目持续集成构建
详解Jenkins +Maven+Tomcat+SVN +Apache项目持续集成 一:前言 1. Jenkins jenkins版本大全http://mirrors.jenkins-ci.org/ ...