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

day16二叉树part03 | 104.二叉树的最大深度 559.n叉树的最大深度 111.二叉树的最小深度 222.完全二叉树的节点个数

104.二叉树的最大深度 (优先掌握递归)

两种思路:
1.使用递归,主要思想是递归遍历左右子树,然后左右子树高度的最大值加1即为当前节点的高度
2.之前学习层次遍历的时候做过这题,直接在层次遍历的时候加上一个计数变量即可

思路1,递归法

class Solution {
public:// 1.首先确定函数参数和返回值,要返回的是一个intint depth(TreeNode* root) {// 2.这是终止条件if (root == nullptr) return 0;// 3.单层计算的逻辑int llen = depth(root->left);int rlen = depth(root->right);return max(llen, rlen) + 1;}int maxDepth(TreeNode* root) {return depth(root);}
};

思路2,层次遍历

class Solution {
public:int maxDepth(TreeNode* root) {queue<TreeNode*> que;int length = 0;if (root != nullptr) que.push(root);while (!que.empty()){int size = que.size();length++;for (int i = 0; i < size; i++){TreeNode* node = que.front();que.pop();if (node->left) que.push(node->left);if (node->right) que.push(node->right);}}return length;}
};

题目链接/文章讲解/视频讲解: https://programmercarl.com/0104.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%9C%80%E5%A4%A7%E6%B7%B1%E5%BA%A6.html

111.二叉树的最小深度 (优先掌握递归)

递归法

class Solution {
public:int depth(TreeNode* root) {if (root == nullptr) return 0;int llen, rlen;llen = depth(root->left);rlen = depth(root->right);// 如果左孩子为空,右孩子不空if (!root->left && root->right) return 1+rlen;// 如果右孩子为空,左孩子不空if (root->left && !root->right) return 1+llen;return 1+min(llen, rlen);}int minDepth(TreeNode* root) {return depth(root);}
};

层次遍历法


class Solution {
public:int minDepth(TreeNode* root) {queue<TreeNode*> que;int length = 0;if (root != nullptr) que.push(root);while (!que.empty()){int size = que.size();length++;for (int i = 0; i < size; i++){TreeNode* node = que.front();que.pop();if (!node->left && !node->right)return length;if (node->left) que.push(node->left);if (node->right) que.push(node->right);}}return length;}
};

题目链接/文章讲解/视频讲解:https://programmercarl.com/0111.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%9C%80%E5%B0%8F%E6%B7%B1%E5%BA%A6.html

222.完全二叉树的节点个数(优先掌握递归)

class Solution {
public:int count(TreeNode* node) {if (node == nullptr) return 0;int leftnum = count(node->left);int rightnum = count(node->right);return leftnum + rightnum + 1;}int countNodes(TreeNode* root) {return count(root);}
};

题目链接/文章讲解/视频讲解:https://programmercarl.com/0222.%E5%AE%8C%E5%85%A8%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E8%8A%82%E7%82%B9%E4%B8%AA%E6%95%B0.html

相关文章:

  • 应用程序图标提取
  • Elasticsearch 8.1官网文档梳理 - 十三、Search your data(数据搜索)
  • 卡码网笔试 | 118 小y删数字、119 小红的字符串切割、120 小红的数字匹配
  • 如何用ai打一场酣畅淋漓的数学建模比赛? 给考研加加分!
  • Crontab 自动脚本实例 | 校园网保持联网
  • 宝石收集,tarjan
  • 佩戴安全头盔监测识别摄像机
  • 15 VUE学习:插槽slot
  • leetcode刷题
  • 数据库连接项目
  • 池的概念以及数据库连接池 Druid
  • 深入理解 Mysql 分层架构:从存储引擎到查询优化器的内部机制解析
  • 1738. 找出第 K 大的异或坐标值
  • 嵌入式进阶——舵机控制PWM
  • 辐射度技术在AI去衣中的魅力与科学
  • Android开源项目规范总结
  • Java 网络编程(2):UDP 的使用
  • Redis学习笔记 - pipline(流水线、管道)
  • springMvc学习笔记(2)
  • Vue UI框架库开发介绍
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 百度地图API标注+时间轴组件
  • 当SetTimeout遇到了字符串
  • 分布式事物理论与实践
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 为什么要用IPython/Jupyter?
  • Java总结 - String - 这篇请使劲喷我
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • #Lua:Lua调用C++生成的DLL库
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • $.each()与$(selector).each()
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (MATLAB)第五章-矩阵运算
  • (SpringBoot)第七章:SpringBoot日志文件
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)LINQ之路
  • ***原理与防范
  • .Net 6.0 处理跨域的方式
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .Net Memory Profiler的使用举例
  • .NET Standard 的管理策略
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • @property python知乎_Python3基础之:property
  • [20170705]diff比较执行结果的内容.txt
  • [2021ICPC济南 L] Strange Series (Bell 数 多项式exp)
  • [C#]使用DlibDotNet人脸检测人脸68特征点识别人脸5特征点识别人脸对齐人脸比对FaceMesh
  • [C/C++] C/C++中数字与字符串之间的转换
  • [go] 策略模式
  • [javaSE] 数据结构(二叉查找树-插入节点)