【代码随想录37期】Day16 二叉树的最大深度、二叉树的最小深度、完全二叉树的节点个数

二叉树的最大深度

v1.0:迭代法
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int maxDepth(TreeNode* root) {int max_depth = 0;if(root==nullptr)return max_depth;queue<TreeNode*> q;q.push(root);while(!q.empty()){int size = q.size();if(size > 0)max_depth++;for(int i = 0; i < size; i++){TreeNode* cur = q.front();q.pop();if(cur->left)q.push(cur->left);if(cur->right)q.push(cur->right);}}return max_depth;}
};
int ret;void traversal(TreeNode* cur, int depth)
{if (cur == nullptr)return;ret = depth > ret ? depth : ret;traversal(cur->left, depth + 1);traversal(cur->right, depth + 1);
}int calculateDepth(TreeNode* root) {traversal(root, 1);return ret;
}

注意depth不好直接作为返回值,使用全局变量ret替代之

二叉树的最小深度

v1.0:递归法
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int min_depth = INT_MAX;void traversal(vector<vector<TreeNode*>>& treeNodes, TreeNode* cur, int depth){if(cur==nullptr)return;if(treeNodes.size()==depth)treeNodes.push_back(vector<TreeNode*>());treeNodes[depth].push_back(cur);if(cur->left==nullptr && cur->right==nullptr &&depth<min_depth)min_depth = depth+1;traversal(treeNodes, cur->left, depth+1);traversal(treeNodes, cur->right, depth+1);}int minDepth(TreeNode* root) {if(root==nullptr)return 0;vector<vector<TreeNode*>> treeNodes;int depth = 0;traversal(treeNodes, root, depth);return min_depth;}
};
int ret = INT32_MAX;
void traversal(TreeNode* cur, int depth)
{if (!cur)return;if(cur && !cur->left && !cur->right)ret = ret > depth ? depth : ret;traversal(cur->left, depth + 1);traversal(cur->right, depth + 1);
}int minDepth(TreeNode* root) {if (root == nullptr)return 0;traversal(root, 1);return ret;
}

完全二叉树的节点个数

int ret = 0;
void traversal(TreeNode* cur)
{if (!cur)return;ret++;traversal(cur->left);traversal(cur->right);
}int countNodes(TreeNode* root) {if (root == nullptr)return 0;traversal(root);return ret;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/839669.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux网络编程】IO多种转接之Reactor

Reactor 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 基于上一篇epoll的学习&#xff0c;现在我们也知道epoll的工作模式有两种&#xff0c…

【UE5.1 多线程 异步】“Async Blueprints Extension”插件使用记录

目录 一、异步生成Actor示例 二、异步计算示例 参考视频 首先需要在商城中下载“Async Blueprints Extension”插件 一、异步生成Actor示例 2. 创建一个线程类&#xff0c;这里要指定父类为“LongAsyncTask”、“InfiniteAsyncTask”、“ShortAsyncTask”中的一个 在线程类…

el-table 实现嵌套表格的思路及完整功能代码

要实现的需求是这样的&#xff1a; 本来我是用 el-table 的 :span-method 方法实现的&#xff0c;但发现合并起来有问题&#xff0c;跟我的需求差距有些大&#xff0c;于是我想到了嵌套表格。但是嵌套完之后的样子也是很奇怪&#xff1a; 不要气馁&#xff0c;思路还是对的&a…

基于文心智能体平台打造专属情感类陪伴智能体【情绪价值提供者】

文章目录 一、文心智能体平台介绍二、文心智能体平台注册三、智能体介绍四、智能体创建过程4.1 基础配置4.2 高级配置4.3 预览调优4.4 公开发布 五、智能体使用心得六、智能体分享方式七、参考链接 一、文心智能体平台介绍 文心智能体平台是百度推出的基于文心大模型的智能体&…

计算机毕业设计 | springboot药品库存追踪与管理系统 药店管理(附源码)

1&#xff0c;绪论 1.1 背景调研 如今药品调价频繁&#xff0c;且品种繁多&#xff0c;增加了药品销售定价的难度。药品来货验收登记中的审查有效期环节容易出错&#xff0c;错收过期或有效期不足的药品。 手工模式下的药品库存难以及时掌握&#xff0c;虽然采取了每日进行缺…

Flask CORS: 解决跨域资源共享问题的利器

文章目录 安装和启用 CORS配置 CORS拓展 在本文中&#xff0c;我们介绍了如何使用 Flask-CORS 扩展来解决跨域问题。Flask-CORS 是一个方便的工具&#xff0c;可以帮助我们轻松地实现跨域资源共享支持。 安装和启用 CORS 要开始使用 Flask-CORS&#xff0c;我们需要先安装它。…

机器学习模型可视化分析和诊断神器Yellowbrick

大家好&#xff0c;机器学习(ML)作为人工智能的核心&#xff0c;近来得到巨大应用&#xff0c;ML是使计算机能够在无需显式编程的情况下进行学习和预测或决策。ML算法通过学习历史数据模式&#xff0c;来对新的未见数据做出明智的预测或决策。然而&#xff0c;构建和训练ML模型…

静态代理和动态代理

静态代理 代理接口 public interface Person {public String wakeUp(String name);public String lunch(String name); }被代理对象 public class Student implements Person{Overridepublic String wakeUp(String name) {System.out.println(name"星期一早上8点上班&a…

【C++风云录】数据处理新纪元:激光扫描数据处理

从libLAS到SPDLib&#xff1a;全面解读六大顶级数据处理库 前言 本文将探讨六个关于点云数据处理的库&#xff0c;包括libLAS、PDAL、PCL、LASlib、LAStools和SPDLib。每个库都将在简介、功能以及支持的格式等方面进行深入的解析和阐述。 欢迎订阅专栏&#xff1a;C风云录 文…

如何让程序适应ChatGPT:提升开发效率的指南

ChatGPT作为一种强大的AI助手&#xff0c;已经在各行各业中展现了其独特的价值。在软件开发领域&#xff0c;如何让程序更好地适应ChatGPT&#xff0c;从而提升开发效率&#xff0c;是一个值得深入探讨的话题。本文将介绍一些策略和方法&#xff0c;帮助开发者优化程序&#xf…

什么是 UUID,uuid

文章目录 一、是什么二、为什么三、怎么用 标题&#xff1a;深入探讨UUID&#xff1a;全球唯一标识符的秘密 一、是什么 在当今数字化时代&#xff0c;唯一标识符&#xff08;UUID&#xff09;在计算机科学领域扮演着重要的角色。UUID是一种用于标识信息的唯一字符串&#xff0…

工具-博客搭建

以下相关讲解均基于hexo github pages方案&#xff0c;请注意&#xff01;&#xff01;&#xff01;博客搭建方案选择 参考文章1 搭建教程 参考文章1 hexo github pages搭建过程中遇到的问题 删除categories、tags 1、删除含有需要删除categories、tags的文章 2、hexo …

【intel CPU】三代牙膏的对比

1、PC处理器的选择 制程工艺 传说的“intel7”,感觉就像老婆饼&#xff0c;并不是7nm。 2、12代到13代其实应该归为一代&#xff0c;那就是大核心不行就堆小核心 3、所以智能踢掉有小核的&#xff1b; 3.1、CPU规格 3.2 内存规格 3.3 封装规格 其他都是一样的&#xff1b; …

彩色进度条(C语言版本)

.h文件 #include<stdio.h> #include<windows.h>#define NUM 101 #define LOAD_UP 50 #define LOAD_DOWN 60 #define SLEEP_SLOW 300 #define SLEEP_FAST 70 版本1&#xff1a;&#xff08;初始版&#xff09; //v1 #include "progress.h" int main() …

Spring ----> IOC

文章目录 一、 Spring 是一个包含众多工具的IoC容器二、 什么是IOC以及好处三、 如何实现loc思想四、Spring提供的实现loC的方法 --- 类注解方法注解4.1 类注解类注解概念介绍类注解的使用 4.2 方法注解Bean 一、 Spring 是一个包含众多工具的IoC容器 场景解析&#xff1a;首先…

TAS5711带EQ和DRC支持2.1声道的20W立体声8V-26V数字输入开环D类数字功放音频放大器

前言 数字功放很难搞&#xff0c;寄存器很多&#xff0c;要配置正确才有声音&#xff0c;要想声音好&#xff0c;要好好调整。 TAS5711出道很多年了&#xff0c;现在仍然在不少功放、音箱中能看到。 TAS5711特征 音频输入/输出 从 18V 电源向 8Q 负载提供 20W 功率 宽 PVDD…

使用libdmtx库高效识别DM码,关键是图像预处理

直接代码 void MainWindow::on_pushButton_decode_datamatrix_clicked() {//ROIcv::Rect rect(876,172,1200,1200);cv::Mat Dm_image_roi Dm_image(rect);cv::imshow("ROI",Dm_image_roi);cv::waitKey(1);//return;//Resizecv::Size size(Dm_image_roi.rows/2 ,Dm_…

【栈】Leetcode 71. 简化路径【中等】

简化路径 给你一个字符串 path &#xff0c;表示指向某一文件或目录的 Unix 风格 绝对路径 &#xff08;以 ‘/’ 开头&#xff09;&#xff0c;请你将其转化为更加简洁的规范路径。 在 Unix 风格的文件系统中&#xff0c;一个点&#xff08;.&#xff09;表示当前目录本身&am…

MySQL的主从复制(主从数据库都是Linux版本)

概述 1.什么是主从复制 主从复制是指将主库的 DDL 和 DML 操作通过二进制日志传到从库服务器中&#xff0c;然后在从库上对这些日志重新执行&#xff08;也叫重做&#xff09;&#xff0c;从而使得从库和主库的数据保持一致。 2.主从复制作用 数据备份&#xff1a;通过主从复…

SQL:学习SQL优化

学习 1.语句 2.原则&#xff08;三条快速记忆&#xff09; 3.常见查询类型 试验 本次试验采用SQL表中的world 数据库中city表来试验 1.查询方法 explain SELECT * FROM city where ID>500 limit 10; #1.all查询&#xff0c;主要是因为查询的键不是District&#xff0c;…