这个情况我们需要取当前节点的非空子节点和min_depth的较小值
下面我们看代码
主函数中直接返回travel函数的返回值
class Solution {
public:
int minDepth(TreeNode* root) {
return travel(root);
}
};
在travel函数中,需要把出口条件写清楚,首先是如果根节点为空,则直接返回0,因为这是一颗空树,深度为0
int travel(TreeNode* root) {
if(root == nullptr) {
return 0;
}
}
然后是对于思路中讨论的情况的实现
int travel(TreeNode* root) {
if(root == nullptr) {
return 0;
}
if(root->left == nullptr && root->right == nullptr) {
return 1;
}
int min_depth = INT_MAX;
if(root->left != nullptr) {
min_depth = min(travel(root->left), min_depth);
}
if(root->right != nullptr) {
min_depth = min(travel(root->right), min_depth);
}
}
这里要注意int min_depth = INT_MAX
这里是把min_depth的值赋了一个最大值,而赋最大值的目的就是为了在后面与非空子节点的深度取较小值时能先取到子节点深度的值
下面我绘制了一幅图描述代码执行题目示例1的过程
首先从根节点进入,根节点非空,判断子节点,左右子节点都非空,分别递归求解左右子节点的深度与min_depth之间的较小值
并且先是左子节点的深度与min_depth取较小值,因为min_depth的初始值是int类型最大值,所以肯定取的是左子节点的深度的值,那么其实这里min_depth的值就变成了左子节点的深度与右子节点的深度二者之间的较小值
然后分别是左右子节点递归求解深度,到了叶子结点就会直接返回高度1,而非叶子结点是怎么向上一层递归返回值的呢?
就需要travel函数中的最后一行代码,也就是非叶子结点比较完子节点的深度和min_depth的值之后,需要返回min_depth的值并且+1,+1是表示当前层的高度为1
int travel(TreeNode* root) {
if(root == nullptr) {
return 0;
}
if(root->left == nullptr && root->right == nullptr) {
return 1;
}
int min_depth = INT_MAX;
if(root->left != nullptr) {
min_depth = min(travel(root->left), min_depth);
}
if(root->right != nullptr) {
min_depth = min(travel(root->right), min_depth);
}
return min_depth + 1;
}
最后是完整代码:
class Solution {
public:
int travel(TreeNode* root) {
if(root == nullptr) {
return 0;
}
if(root->left == nullptr && root->right == nullptr) {
return 1;
}
int min_depth = INT_MAX;
if(root->left != nullptr) {
min_depth = min(travel(root->left), min_depth);
}
if(root->right != nullptr) {
min_depth = min(travel(root->right), min_depth);
}
return min_depth + 1;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)
最后
前端CSS面试题文档,JavaScript面试题文档,Vue面试题文档,大厂面试题文档,需要的读者可以戳这里免费领取!
img-qC90A3dt-1713608156796)]
最后
前端CSS面试题文档,JavaScript面试题文档,Vue面试题文档,大厂面试题文档,需要的读者可以戳这里免费领取!
[外链图片转存中…(img-NAvh07bm-1713608156796)]
[外链图片转存中…(img-muPpNbzk-1713608156796)]