【代码随想录】算法训练营 第十六天 第六章 二叉树 Part 3
104. 二叉树的最大深度
题目
给定一个二叉树 root ,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
示例:

输入:root = [3,9,20,null,null,15,7] 输出:3
思路
用递归来做,其中心思路是,一个结点的最大深度相当于其左右子树的最大深度加一,这就可以利用递归求得子树深度了。
接下来是递归三部曲:
1. 首先确定返回值和参数,返回值肯定是深度,参数则是二叉树结点;
2. 其次确定递归终止条件,也就是当结点为空时返回0;
3. 最后明确每一次递归要做的事,其实就是按找中心思路返回最大深度。
代码
class Solution {
public:int getdepth(TreeNode* node) {if (node == NULL) return 0;int leftdepth = getdepth(node->left);int rightdepth = getdepth(node->right);int depth = 1 + max(leftdepth, rightdepth);return depth;}int maxDepth(TreeNode* root) {return getdepth(root);}
};
111. 二叉树的最小深度
题目
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
思路
这道题的中心思路跟上面的一样,都是用递归法,每次取左右子树最小深度加一,不过这里有一个易错点,那就是深度要从叶子结点开始算,所以当遇到一个只有一个子树的结点时,不能记录空的一边,而是递归返回有子树的那边的深度。
代码
class Solution {
public:int getdepth(TreeNode* node) {if (node == NULL) return 0;int leftdepth = getdepth(node->left);int rightdepth = getdepth(node->right);if (node->left == NULL && node->right != NULL)return 1 + rightdepth;if (node->left != NULL && node->right == NULL)return 1 + leftdepth;int depth = 1 + min(leftdepth, rightdepth);return depth;}int minDepth(TreeNode* root) {return getdepth(root); }
};
222. 完全二叉树的结点个数
题目
给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。
完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2h 个节点。
普通解法
管他完不完全,反正也是二叉树,既然是二叉树,之前学过的递归和非递归遍历都可以用来求结点数,只需要把原来的结点值入vector变成计数器加一,下面是用非递归前序遍历来做的:
class Solution {
public:int countNodes(TreeNode* root) {stack<TreeNode*> st;int num = 0;if (root != NULL) st.push(root);while (!st.empty()) {TreeNode* cur = st.top();st.pop();num++;if (cur->right) st.push(cur->right);if (cur->left) st.push(cur->left);}return num;}
};
完全二叉树解法
完全二叉树可以不断拆分为一个满二叉树和一个完全二叉树,每一个满二叉树可以一边往下走一边求深度,如果左右子树的深度相同,就可以直接计算出这个二叉树的结点个数,因为满二叉树的结点数等于2的深度次方减一,如果不是满二叉树,就递归求解这个完全二叉树的根节点的左右子树的结点数再加一。
class Solution {
public:int countNodes(TreeNode* root) {if (root == NULL) return 0;TreeNode* left = root->left;TreeNode* right = root->right;int leftDepth = 0, rightDepth = 0;while (left) {left = left->left;leftDepth++;}while (right) {right = right->right;rightDepth++;}if (leftDepth == rightDepth) {return (2 << leftDepth) - 1;}return countNodes(root->left) + countNodes(root->right) + 1;}
};
相关文章:
【代码随想录】算法训练营 第十六天 第六章 二叉树 Part 3
104. 二叉树的最大深度 题目 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例: 输入:root [3,9,20,null,null,15,7] 输出:3 思路 用递归来做,…...
【C++数据结构】顺序存储结构的抽象实现
文章目录 前言一、目标二、SeqList实现要点三、SeqList函数实现3.1 get函数3.2 set函数3.3 insert函数带2个参数的insert带一个参数的insert 3.4 remove函数3.5 clear函数3.6 下标运算符重载函数无const版本const版本 3.7 length函数 总结 前言 当谈到C数据结构时,…...
LeetCode75——Day31
文章目录 一、题目二、题解 一、题目 206. Reverse Linked List Given the head of a singly linked list, reverse the list, and return the reversed list. Example 1: Input: head [1,2,3,4,5] Output: [5,4,3,2,1] Example 2: Input: head [1,2] Output: [2,1] Exa…...
小白学爬虫:通过商品ID或商品链接封装接口获取淘宝商品销量数据接口|淘宝商品销量接口|淘宝月销量接口|淘宝总销量接口
淘宝商品销量接口是淘宝开放平台提供的一种API接口,通过该接口,商家可以获取到淘宝平台上的商品销量数据。使用淘宝商品销量接口的步骤如下: 1、在淘宝开放平台注册并创建应用,获取API Key和Secret Key等必要的信息。 2、根据淘宝…...
AI:75-基于生成对抗网络的虚拟现实场景增强
🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌在这个漫长的过程,中途遇到了不少问题,但是…...
【MySQL数据库】| 索引以及背后的数据结构
🎗️ 主页:小夜时雨 🎗️ 专栏:MySQL数据库 🎗️ 如何优雅的活着,是我找寻的方向 目录 1. 基本知识2. 索引背后的数据结构总结 1. 基本知识 概念 索引是一种特殊的文件,包含着对数据表里所有…...
家用电脑做服务器,本地服务器搭建,公网IP申请,路由器改桥接模式,拨号上网
先浇一盆冷水! 我不知道其他运营商是什么情况。联通的运营商公网IP端口 80、8080、443 都会被屏蔽掉,想要开放必须企业备案(个人不行)才可以。也就是说,只能通过其他端口进行showtime了。 需要哪些东西? 申…...
原神游戏干货分享:探索璃月的宝箱秘密,提高游戏资源获取效率!
《原神》是一款备受玩家喜爱的开放世界冒险游戏,而在游戏中获取资源是提升角色实力的重要途径。在这篇实用干货分享中,我们将介绍一些探索璃月地区的宝箱秘密,帮助你提高游戏资源获取的效率。 首先,璃月地区的宝箱分为普通宝箱和精…...
idea 2023 设置启动参数、单元测试启动参数
找到上方的editconfigration, 如下图,如果想在启动类上加,就选择springboot,如果想在单元测试加,就选择junit 在参数栏设置参数,多个参数以空格隔开 如果没有这一栏,就选择就可以了。 然后&…...
RSA加密算法(后端)
public class RSA {private static final String RSA_ALGORITHM "RSA";/*** 生成RSA密钥对** return RSA密钥对*/public static KeyPair generateKeyPair() throws NoSuchAlgorithmException {KeyPairGenerator keyPairGenerator KeyPairGenerator.getInstance(RSA…...
挑战100天 AI In LeetCode Day08(热题+面试经典150题)
挑战100天 AI In LeetCode Day08(热题面试经典150题) 一、LeetCode介绍二、LeetCode 热题 HOT 100-102.1 题目2.2 题解 三、面试经典 150 题-103.1 题目3.2 题解 一、LeetCode介绍 LeetCode是一个在线编程网站,提供各种算法和数据结构的题目&…...
地铁机电设备健康管理现状及改善方法
轨道交通和我们的生活息息相关,从火车到地铁再到轻轨,给人们的出行带来了很大的便利。因此,保障轨道交通的的正常运行和安全至关重要,需要运维人员及时排查设备的问题,解决故障,保证轨道交通的安全运行。本…...
安卓NDK开发
1、jni:java native interface 作用:用于java代码和C、c代码的交互(代码混编); 分类使用:Jni静态注册、jni动态注册 2、静态注册 1).绑定java方法和C/C方法的方式之一; …...
高性能网络编程 - 解读5种I/O模型
文章目录 服务端处理网络请求流程图基础概念阻塞调用 vs 非阻塞调用同步处理 vs 异步处理阻塞、非阻塞 和 同步、异步的区别recvfrom 函数 五种I/O模型I/O模型1:阻塞式 I/O 模型(blocking I/O)I/O模型2:非阻塞式 I/O 模型(non-blocking I/O&a…...
复盘一个诡异的Bug
该Bug的诡异之处在于这是一个由多种因素综合碰撞之后形成的综合体。纵观整个排查过程,一度被错误的目标误导,花费大量功夫后才找到问题点所在,成熟的组件在没有确凿证据之前不能随意怀疑其稳定性。 前言 此前在接入两台粒径谱仪(…...
【uniapp】通用列表封装组件
uniapp页面一般都会有像以下的列表页面,封装通用组件,提高开发效率; (基于uView前端框架) 首先,通过设计图来分析一下页面展示和数据结构定义 w-table组件参数说明 参数说明类型可选值默认值toggle列表是…...
17 Linux 中断
一、Linux 中断简介 1. Linux 中断 API 函数 ① 中断号 每个中断都有一个中断号,通过中断号可以区分出不同的中断。在 Linux 内核中使用一个 int 变量表示中断号。 ② request_irq 函数 在 Linux 中想要使用某个中断是需要申请的,request_irq 函数就是…...
微信小程序真机调试连接状态一直在正常和未链接之间反复横跳?
背景:小程序真机调试的时候,发现真机的network不显示接口调用情况,控制台也没有输出内容。具体如下所示; 解决方法: 1、确保手机端连接的网络和微信开发者工具网络一致,比如用同一个WiFi 2、真机自动调试…...
最新Next 14快速上手基础部分
最新Next 14快速上手基础部分 最新的NEXT快速上手文档,2023.10.27 英文官网同步,版本Next14.0.0 本项目案例:GitHub地址,可以根据git回滚代码到对应知识,若有错误,欢迎指正! 一、介绍 1.什么是…...
【uniapp/uview】Collapse 折叠面板更改右侧小箭头图标
最终效果是这样的: 官方没有给出相关配置项,后来发现小箭头不是 uview 的图标,而是 unicode 编码,具体代码: // 箭头图标 ::v-deep .uicon-arrow-down[data-v-6e20bb40]:before {content: \1f783; }附一个查询其他 u…...
VSCode + LaTeX Workshop:打造比 TexStudio 更顺手的 Linux 论文写作环境
VSCode LaTeX Workshop:打造比 TexStudio 更顺手的 Linux 论文写作环境 对于长期在Linux环境下撰写学术论文或技术报告的研究人员来说,编辑器的选择直接影响写作效率和体验。虽然TexStudio一直是LaTeX用户的首选,但VSCode配合LaTeX Workshop…...
3秒搞定网页图片格式转换:免费Chrome扩展Save Image as Type终极使用指南
3秒搞定网页图片格式转换:免费Chrome扩展Save Image as Type终极使用指南 【免费下载链接】Save-Image-as-Type Save Image as Type is an chrome extension which add Save as PNG / JPG / WebP to the context menu of image. 项目地址: https://gitcode.com/gh…...
050、综合项目实战二:基于FreeRTOS的实时数据采集与控制系统
050、综合项目实战二:基于FreeRTOS的实时数据采集与控制系统 从一次诡异的采样丢帧说起 上周在产线调试,发现采集到的温度数据偶尔会跳变到零值。逻辑分析仪抓了半天,发现是ADC任务被某个不知名的任务抢占了,采样窗口错过了一个周期。这种问题在裸机轮询里很难出现,但在…...
保姆级教程:用Python+ANSYS Workbench复现电机定子模态仿真(附避坑点)
PythonANSYS Workbench电机定子模态仿真全流程解析与实战避坑指南 电机定子的模态分析是NVH(噪声、振动与声振粗糙度)性能优化的核心环节。本文将手把手带你用Python脚本预处理电磁力数据,并通过ANSYS Workbench完成从几何建模到模态结果验证…...
从分辨力到稳定性:构建可靠测量系统的核心要素解析
1. 测量系统的基石:理解分辨力的本质 分辨力就像测量系统的"视力"——它决定了系统能否看清微小的变化。想象一下用普通尺子和游标卡尺测量同一根金属棒的长度差异:普通尺子可能只能识别1毫米的变化,而游标卡尺能捕捉0.02毫米的细微…...
EMAGE:从音频到全身动作,揭秘统一框架如何重塑数字人动画生成
1. 为什么数字人动画需要统一框架? 数字人动画技术这几年发展得特别快,从早期的僵硬机械动作,到现在能做出几乎以假乱真的表情和肢体语言。但不知道你有没有发现,很多数字人在说话时,嘴巴动得很自然,身体却…...
从Fritzing画图到Proteus仿真:手把手带你完成一个Arduino光控小项目的完整工作流
从Fritzing到Proteus:Arduino光控项目全流程实战指南 当你第一次尝试将创意转化为实际电路时,是否曾被不同工具间的切换困扰?Fritzing的直观与Proteus的专业如何无缝衔接?本文将带你完整走通从原型设计到仿真验证的全流程…...
一个 ABAP 面试题:这段 ABAP 报表运行后,屏幕上到底会看到什么
实际显示结果 这段程序执行之后,不会把那一长串十六进制字符原样打到屏幕上,而是会先把它还原成一个 HTML 片段,再交给 CL_DEMO_OUTPUT=>WRITE_HTML( ) 去渲染。所以,最后看到的是一个格式化后的页面,而不是一堆标签文本。CL_DEMO_OUTPUT 本来就是 ABAP 关键字文档里专…...
告别Flash焦虑!聊聊英飞凌TC4x用RRAM给汽车MCU带来的三大变化
告别Flash焦虑!英飞凌TC4x用RRAM重塑汽车MCU的三大技术革命 当特斯拉Model 3的OTA更新包突破2GB时,传统汽车MCU的Flash存储技术正面临前所未有的容量危机。在智能驾驶域控制器需要实时处理8个高清摄像头数据的今天,英飞凌AURIX™ TC4x系列通过…...
Webviz性能优化:5个关键技巧提升渲染速度300%
Webviz性能优化:5个关键技巧提升渲染速度300% 【免费下载链接】webviz web-based visualization libraries 项目地址: https://gitcode.com/gh_mirrors/we/webviz Webviz作为一款强大的web-based visualization库,在处理大规模3D场景和实时数据可…...
