当前位置: 首页 > news >正文

【递归】10. leetcode 111 二叉树的最小深度

题目描述

题目链接:二叉树的最小深度
在这里插入图片描述

2 解答思路

递归分为三步,接下来就按照这三步来思考问题

第一步:挖掘出相同的子问题  (关系到具体函数头的设计)
第二步:只关心具体子问题做了什么  (关系到具体函数体怎么写,是一个宏观的过程)
第三步:找到递归的出口,防止死递归  (关系到如何跳出递归)

2.1 相同的子问题(函数头设计)

相同的子问题:找二叉树到叶子节点的最短距离,就是找左子树到叶子节点的最短距离和右子树到叶子节点的最短距离的最小值。

下面是leetcode给的函数头:

    int minDepth(TreeNode* root) {}

传入一个二叉树,返回二叉树到叶子节点的最短距离。

根据“相同的子问题”,我们不仅需要传入一个二叉树,而且需要传递二叉树的深度,因此需要两个参数。设计的函数头如下:

void dfs(TreeNode* root, int cnt)
{
}

2.2 具体的子问题做了什么(函数体的实现)

具体的子问题:

1.记录当前节点的深度。
2.如果当前节点不是叶子节点就继续计算左子树和右子树的深度。
3.如果当前节点是叶子节点就判断当前深度和最小深度谁小,更新最小深度,然后直接返回(这也是一个递归的出口)

递归的出口:

1.当前节点为空:返回。
2.当前节点为叶子节点:更新值,返回。

函数的实现:

    void dfs(TreeNode* root, int cnt){if (root == nullptr)return;cnt++;//当节点为叶子节点的时候更新答案if ((root->left == nullptr) && (root->right == nullptr)){ans = min(ans, cnt);return;}//如果不是叶子 -- cnt是局部变量,递归调用的时候会自动退回到当时的值dfs(root->left, cnt);dfs(root->right, cnt);}

总结

class Solution {
public:
//设置为全局变量就不用传递到函数里面去了int ans = INT_MAX;int minDepth(TreeNode* root) {//最开始的深度是0dfs(root, 0);return root ? ans : 0;}void dfs(TreeNode* root, int cnt){if (root == nullptr)return;cnt++;//当节点为叶子节点的时候更新答案if ((root->left == nullptr) && (root->right == nullptr)){ans = min(ans, cnt);return;}//如果不是叶子 -- cnt是局部变量,递归调用的时候会自动退回到当时的值dfs(root->left, cnt);dfs(root->right, cnt);}
};

在这里插入图片描述


http://www.mrgr.cn/news/41032.html

相关文章:

  • Flink从ck拉起任务脚本
  • Visual Studio C# 处理和修复 WinRiver II 测量项目 MMT 文件错误
  • C++ 语言特性08 - 非静态成员的初始化
  • 音视频入门基础:FLV专题(10)——Script Tag实例分析
  • Leecode热题100-48.旋转图像
  • 【MAUI】CollectionView之 垂直网格
  • html中的文本标签(含标签的实现案例)
  • .NET 一款支持冰蝎的免杀WebShell
  • 麒麟系统命令失效快速修复
  • 一文掌握Harbor镜像同步公有云镜像仓库实践
  • Python机器学习框架介绍和入门案例:Scikit-learn、TensorFlow与Keras、PyTorch
  • JS中Object和Array的相互转换:深入全面讲解
  • 语言的嵌套和函数指针
  • 控制流的高级用法或探讨更复杂的编程主题
  • 顺序表讲解
  • uniapp 上了原生的 echarts 图表插件了 兼容性还行
  • 生信初学者教程(二十二):Boruta+RF筛选候选标记物
  • NumPy 第一课 -- 简介
  • ISA-95制造业中企业和控制系统的集成的国际标准-(4)
  • 合并代码讲解