力扣日记11.27-【二叉树篇】二叉树的最大深度

力扣日记:【二叉树篇】二叉树的最大深度

日期:2023.11.27
参考:代码随想录、力扣

104. 二叉树的最大深度

题目描述

难度:

给定一个二叉树 root ,返回其最大深度。

二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:3

示例 2:

输入:root = [1,null,2]
输出:2

提示:

  • 树中节点的数量在 [0, 10^4] 区间内。
  • -100 <= Node.val <= 100

题解

递归法(cpp ver)
/*** 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:// 递归法:后序遍历 (实际上是求高度)// 1. 确定递归函数的参数和返回值:参数就是传入树的根节点,返回就返回以该节点为根的树的深度int getdepth(TreeNode* node) {  // 2. 确定终止条件:如果为空节点的话,就返回0,表示高度为0。if (node == NULL) return 0;// 3. 确定单层递归的逻辑:先求它的左子树的深度,再求右子树的深度,最后取左右深度最大的数值 再+1 (加1是因为算上当前中间节点)就是目前节点为根节点的树的深度。int leftdepth = getdepth(node->left);       // 左(左子树的高度)int rightdepth = getdepth(node->right);     // 右(右子树的高度)int depth = 1 + max(leftdepth, rightdepth); // 中(左子树和右子树的根节点的高度, 包括根节点, 故+1)return depth;}int maxDepth(TreeNode* root) {return getdepth(root);}
};
迭代法(go ver)
/*** Definition for a binary tree node.* type TreeNode struct {*     Val int*     Left *TreeNode*     Right *TreeNode* }*/
func maxDepth(root *TreeNode) int {// 使用迭代法的话,使用层序遍历是最为合适的,因为最大的深度就是二叉树的层数,和层序遍历的方式极其吻合queue := list.New()maxDepth := 0if root != nil {queue.PushBack(root)}for queue.Len() > 0 {// 记录当前队列长度size := queue.Len()for size > 0 {// 弹出并写入结果front := queue.Front()node := queue.Remove(front).(*TreeNode) // 存进list之后类型会变为*list.Element,要转换为*TreeNode// 左右节点入队列if node.Left != nil {queue.PushBack(node.Left)}if node.Right != nil {queue.PushBack(node.Right)}size -= 1}maxDepth += 1}return maxDepth
}

复杂度

时间复杂度:
空间复杂度:

思路总结

  • 本题如果用迭代法,则直接使用层序遍历的模板解题即可
  • 如果用递归法,则相对难一些:
    • 首先要理解二叉树的深度高度区别:
      • 二叉树节点的深度:指从根节点该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始)—— 即深度是从某节点角度往上(根节点)看的
      • 二叉树节点的高度:指从该节点叶子节点的最长简单路径边的条数或者节点数(取决于高度从0开始还是从1开始)—— 即高度是从某节点角度往下(叶子节点)看的
      • 因此,根节点的高度就是二叉树的最大深度
    • 本题可以使用前序(中左右),也可以使用后序遍历(左右中),使用前序求的就是深度,即最大的叶子节点深度,使用后序求的是高度,即根节点的高度。(后序遍历相对容易理解一些,见代码)

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

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

相关文章

分布式篇---第六篇

系列文章目录 文章目录 系列文章目录前言一、说说什么是漏桶算法二、说说什么是令牌桶算法三、数据库如何处理海量数据?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码…

第二证券:数据要素概念活跃,零点有数“20cm”涨停,皖通科技3连板

数据要素概念27日盘中强势拉升&#xff0c;到发稿&#xff0c;零点稀有“20cm”涨停&#xff0c;易华录涨超10%&#xff0c;兴正确通、德生科技、皖通科技、中远海科等亦涨停&#xff0c;三维六合涨近10%。值得注意的是&#xff0c;皖通科技已接连3个生意日涨停。 消息面上&am…

GPTs 初体验 - 1 分钟就能创建一个自己的 ChatGPT? | 京东云技术团队

就在 11.10 号早上&#xff0c;ChatGPT 已经偷摸的把GPTs功能&#xff0c;开放给所有尊贵的 Plus 用户了。 随着这波的功能开放&#xff0c;界面也是改了不少。点击左侧的 Explore 或者左下角的用户处&#xff0c;就可以直接进入新的 GPTs 功能&#xff1a; 这里可以看到我们…

[网络] 5. TCP 链接的建立与释放~汇总

大部分内容源于网络加之个人理解&#xff5e;巨人的肩膀有多大决定你可以看得多远&#xff5e; 文章目录 1. 三次握手说一下三次握手的过程为什么是三次握手 2. 四次挥手说一下四次挥手的过程为什么需要四次挥手有可能出现三次挥手吗&#xff0c;什么时候会出现呢&#xff1f;为…

在 Banana Pi BPI-R2 PRO RK3568开源路由器上安装 OpenWrt 23 快照固件

这是在 BPI-R2 Pro&#xff08;到内部 eMMC&#xff09;上安装 OpenWrt 23 快照固件的快速指南。该固件已预装 LuCI 和一些软件包。这是 2023 年 9 月 2 日的屏幕截图。 LuCI 主页概述。Linux内核是6.1.50 网络接口概述。PPPoE 连接已启动并正在运行 速度测试和 CPU 使用情况…

MySQL-04-InnoDB存储引擎锁和加锁分析

Latch一般称为闩锁&#xff08;轻量级锁&#xff09;&#xff0c;因为其要求锁定的时间必须非常短。在InnoDB存储引擎中&#xff0c;latch又分为mutex&#xff08;互斥量&#xff09;和rwlock&#xff08;读写锁&#xff09;。 Lock的对象是事务&#xff0c;用来锁定的是…

minio客户端基本操作

minio客户端基本操作 桶 创建桶 如果要创建新的桶 输入名称&#xff0c;点击创建即可&#xff0c;默认权限就行 删除桶 点击要删除的桶 点击删除 修改桶 如果哪天需要修改桶的权限或者其他信息&#xff0c;还是先点击这个桶进入详情 然后点击要修改的属性&#xff0c;选择…

【沐风老师】3DMAX快速地板屋顶墙面铺设插件使用方法详解

3DMAX快速地板屋顶墙面铺设插件使用教程 3DMAX快速地板屋顶墙面铺设插件&#xff0c;一键生成各种地板、墙面纹理模型&#xff0c;是一款非常实用的室内设计和建筑建模插件。 【适用版本】 3dMax7或更新版本 【安装方法】 该插件无需安装&#xff0c;直接在建模过程中使用&a…

DevEco Studio中 关闭/开启 代码保存界面自动更新

例如 我们这里有这样一个案例 这里 我们直接将 字体的 50 改为 30 我们直接 Ctrl S 保存代码 效果立马就改了 很明显 这是个热更新的服务 但就例如 我们开发 java比较大的项目 我们不希望它自动更新 免得内存扛不住 我们可以看编辑器上面有一个像小插座一样的东西 目前是一…

MIT_线性代数笔记:第 07 讲 求解 Ax=0:主变量,特解

目录 前言计算零空间 Nullspace特解 Special solutions行最简阶梯矩阵 Reduced row echelon form &#xff08;rref&#xff09; 前言 我们定义了矩阵的列空间和零空间&#xff0c;那么如何求得这些子空间呢&#xff1f;本节课的内容即从定义转到算法。 计算零空间 Nullspace…

Arthas 使用

Arthas是阿里巴巴开源的Java诊断工具&#xff0c;采用命令行交互的形式进行问题的定位与诊断。它能够帮助你. 解决以下问题&#xff1a; 这个类从哪个 jar 包加载的&#xff1f;为什么会报各种类相关的 Exception&#xff1f;我改的代码为什么没有执行到&#xff1f;难道是我…

活动回顾|阿里云云原生 Serverless 技术实践营 深圳站回放PPT下载

11月24日“阿里云云原生 Serverless 技术实践营”深圳站圆满落幕。活动受众以关注 Serverless 技术的开发者、企业决策人、云原生领域创业者为主&#xff0c;活动形式为演讲、动手实操&#xff0c;让开发者通过一个下午的时间增进对 Serverless 技术的理解&#xff0c;快速上手…

visual Studio MFC 绘制单一颜色三角形、渐变颜色边框三角形、渐变填充三角形、边框渐变的正方形与填充渐变的正方形实例

MFC 绘制三角形 本文使用visual Studio MFC 平台实现绘制单一颜色三角形、渐变颜色边框三角形、渐变填充三角形、边框渐变的正方形与填充渐变的正方形. 关于基础工程的创建请参考Visual Studio 使用MFC 单文档工程绘制单一颜色直线和绘制渐变颜色的直线 文章目录 MFC 绘制三角形…

在Python中matplotlib函数的plt.plot()函数的颜色参数设置,以及可以直接运行的程序代码!

文章目录 前言一、使用字符串颜色&#xff1a;二、使用十六进制颜色&#xff1a;三、使用RGB元组&#xff1a;四、使用颜色映射&#xff1a;总结 前言 在matplotlib中&#xff0c;plt.plot()函数可以接受颜色参数&#xff0c;可以设置为字符串颜色&#xff08;如red&#xff0…

瓶盖内的条码需要注意哪些?,才能帮助企业有效搭建与消费者沟通~

在不断发展的消费品领域&#xff0c;特别是饮料行业&#xff0c;组织不断寻求创造性的方法来扩大客户参与度、增强品牌忠诚度并消除假冒产品。一种获得认可的新兴方法是在瓶盖和瓶盖上实施DataMatrix 条形码扫描。这种创新方法提供了许多好处&#xff0c;从改善消费者互动到强化…

利用广度优先或模拟解决米诺骨牌

本周推荐阅读 C二分算法&#xff1a;得到子序列的最少操作次数 题目 n 张多米诺骨牌排成一行&#xff0c;将每张多米诺骨牌垂直竖立。在开始时&#xff0c;同时把一些多米诺骨牌向左或向右推。 每过一秒&#xff0c;倒向左边的多米诺骨牌会推动其左侧相邻的多米诺骨牌。同样…

Python基础教程:强大的Pandas数据分析库

Pandas是一个基于 NumPy 的非常强大的开源数据处理库&#xff0c;它提供了高效、灵活和丰富的数据结构和数据分析工具&#xff0c;当涉及到数据分析和处理时&#xff0c;使得数据清洗、转换、分析和可视化变得更加简单和高效。本文中&#xff0c;我们将学习如何使用Pandas来处理…

BEV+Transformer架构加速“上车”,智能驾驶市场变革开启

BEVTransformer成为了高阶智能驾驶领域最为火热的技术趋势。 近日&#xff0c;在2023年广州车展期间&#xff0c;不少车企及智能驾驶厂商都发布了BEVTransformer方案。其中&#xff0c;极越01已经实现了“BEVTransformer”的“纯视觉”方案的量产&#xff0c;成为国内唯一量产…

使用Pytorch从零开始构建Normalizing Flow

归一化流 (Normalizing Flow) &#xff08;Rezende & Mohamed&#xff0c;2015&#xff09;学习可逆映射 f : X → Z f: X \rightarrow Z f:X→Z, 在这里X是我们的数据分布&#xff0c;Z是选定的潜在分布。 归一化流是生成模型家族的一部分&#xff0c;其中包括变分自动编…

系列二十、Spring循环依赖问题

一、概述 循环依赖是指多个bean之间相互依赖&#xff0c;形成了一个闭环。比如A依赖于B、B依赖于C、C依赖于A&#xff0c;形成了一个圈&#xff0c;如&#xff1a; 二、循环依赖案例 2.1、构造方法注入产生循环依赖案例 2.1.1、ServiceA /*** Author : 一叶浮萍归大海* Date…