树、递归、广度优先搜索(BFS)————二叉树的最小深度
2024-08-24 03:05:02
解法一:递归 遇到叶子节点不递归,否则接着往子树递归,每次递归层数加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+));
}
}
};
最新文章
- [PHP源码阅读]array_pop和array_shift函数
- redis3.2 最新版本启动配置文件redis.conf详细说明
- rsync+inotify实现远程数据备份
- 十三、Java基础---------多线程总结
- [IR] Probabilistic Model
- C++_Eigen函数库用法笔记——The Array class and Coefficient-wise operations
- 自动化测试工具Selenium和QTP的比较
- 使用代码修改camera.cullingMask
- 线性表-串:KMP模式匹配算法
- MySql数据库索引优化注意事项
- MyEclipse启动时报 Unable to acquire application service. Ensure that the org.eclips
- Linux下区分物理CPU、逻辑CPU和CPU核数
- linear-gradient线性渐变
- python实现散列表的链表法
- shift+zz保存并退出
- 【Vijos】lxhgww的奇思妙想
- spring cloud 配置中心
- Linux命令-统计文件中的字节数、字数、行数:wc
- Redis构建处理海量数据的大型购物网站
- (转)ASP连接sql server实例解析