解法一:递归 遇到叶子节点不递归,否则接着往子树递归,每次递归层数加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+));
}
}
};

最新文章

  1. [PHP源码阅读]array_pop和array_shift函数
  2. redis3.2 最新版本启动配置文件redis.conf详细说明
  3. rsync+inotify实现远程数据备份
  4. 十三、Java基础---------多线程总结
  5. [IR] Probabilistic Model
  6. C++_Eigen函数库用法笔记——The Array class and Coefficient-wise operations
  7. 自动化测试工具Selenium和QTP的比较
  8. 使用代码修改camera.cullingMask
  9. 线性表-串:KMP模式匹配算法
  10. MySql数据库索引优化注意事项
  11. MyEclipse启动时报 Unable to acquire application service. Ensure that the org.eclips
  12. Linux下区分物理CPU、逻辑CPU和CPU核数
  13. linear-gradient线性渐变
  14. python实现散列表的链表法
  15. shift+zz保存并退出
  16. 【Vijos】lxhgww的奇思妙想
  17. spring cloud 配置中心
  18. Linux命令-统计文件中的字节数、字数、行数:wc
  19. Redis构建处理海量数据的大型购物网站
  20. (转)ASP连接sql server实例解析

热门文章

  1. 【udacity】机器学习-决策树
  2. tsar采集数据原理
  3. 小结ajax中的同源和跨域 jsonp和cors
  4. Laravel的路由功能
  5. [caffe] caffe训练tricks
  6. 谈谈python里面关于任务队列
  7. strtotime的一个使用问题
  8. Maven Hibernate
  9. 2016 年 Java 工具和技术的调查:IDEA 已超过
  10. 线程锁的机制Lock