牛客热题:二叉树的最大深度

news2024/9/24 23:23:04

📟作者主页:慢热的陕西人

🌴专栏链接:力扣刷题日记

📣欢迎各位大佬👍点赞🔥关注🚓收藏,🍉留言

在这里插入图片描述

文章目录

  • 牛客热题:二叉树的最大深度
    • 题目链接
    • 方法一:递归
      • 思路
      • 代码
      • 复杂度
    • 方法二:层序遍历
      • 思路
      • 代码
      • 复杂度

牛客热题:二叉树的最大深度

题目链接

二叉树的最大深度_牛客题霸_牛客网 (nowcoder.com)

方法一:递归

思路

  1. 首先进行递归终止条件的判断:如果当前节点为空,则返回深度 0。
  2. 接着判断当前节点是否为叶子节点(即左右子节点均为空):
    • 如果是叶子节点,则返回深度 1,表示当前节点为一层。
  3. 如果不是叶子节点,则分别递归地计算左子树和右子树的最大深度,得到左子树的深度 l 和右子树的深度 r
  4. 最终返回大深度的值加 1,即 max(l, r) + 1,表示当前节点所在层的深度。

这样通过递归的方式,从根节点开始逐层向下计算深度,直到叶子节点为止,最终得到整棵树的最大深度。

代码

    int maxDepth(TreeNode* root) 
    {
        if(root == nullptr) return 0;
        //叶子节点
        if(root->left == nullptr && root->right == nullptr) return 1;

        int l = maxDepth(root->left);
        int r = maxDepth(root->right);
        return (l > r ? l : r) + 1;
    }

复杂度

这个函数的时间复杂度和空间复杂度如下:

  • 时间复杂度:O(N)

    • 其中,N 是二叉树中的节点数。
    • 函数需要遍历每个节点一次,对于每个节点,都需要进行常数时间的判断和递归调用。
  • 空间复杂度:O(N)

    对于空间复杂度,在最坏情况下,递归调用会将所有节点压入调用栈,导致空间复杂度为 O(N)。

方法二:层序遍历

思路

这段代码使用了广度优先搜索(BFS)的思路来计算二叉树的最大深度。让我来解释一下它的思路:

  1. 首先,检查根节点是否为空。如果为空,则返回深度为 0。
  2. 如果根节点不为空,则创建一个队列 q,并将根节点压入队列。
  3. 接着,定义一个变量 res 用来保存深度,初始化为 0。
  4. 进入循环,只要队列不为空,就执行以下操作:
    • 获取当前队列的大小,表示当前层的节点数,记为 n
    • 遍历当前层的所有节点,对于每个节点:
      • 弹出队列中的节点 cur
      • 如果 cur 的左子节点不为空,则将其加入队列。
      • 如果 cur 的右子节点不为空,则将其加入队列。
    • 完成一层的遍历后,计为每个节点都会入队出队各一次,所以时间复杂度为 O(N),其中 N 是二叉树的节点数。由于使用了队列,空间复杂度为 O(W),其中 W 是二叉树中最大的层的节点数,通常是二叉树的宽度。

代码

 int maxDepth(TreeNode* root) 
    {
        if(root == nullptr) return 0;
        queue<TreeNode*> q;
        q.push(root);
        int res = 0;
        while(!q.empty())
        {
            int n = q.size();
            for(int i = 0; i < n; ++i)
            {
                TreeNode* cur = q.front();
                q.pop();
                if(cur->left != nullptr) q.push(cur->left);
                if(cur->right != nullptr) q.push(cur->right);
            }
            res++;
        }

        return res;
    }

复杂度

  • 时间复杂度:O(N)

    • 其中,N 是二叉树中的节点数。
    • 在最坏情况下,需要遍历每个节点一次,对于每个节点,都需要进行常数时间的操作。
  • 空间复杂度:O(W)

    • 其中,W 是二叉树的最大宽度,即二叉树中最宽的那一层的节点数。
    • 在队列中同时存储一层的所有节点,因此空间复杂度取决于二叉树的宽度。

综上所述,这段代码的时间复杂度为 O(N),空间复杂度为 O(W)。

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

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

相关文章

算法day06

第一题 1658. 将 x 减到 0 的最小操作数 如题上述&#xff1a; 本题原来的意思给定一个数字x&#xff0c;从数组的左边或者右边 使用x减去数组中的数字&#xff0c;直到减去最后一个数字为0时&#xff0c;返回最小的操作次数&#xff1b;如果最终减去的数组中的数字之后不能得…

ElastiCache Serverless for Redis应用场景和性能成本分析

一. 前言 传统基于实例节点的 Redis 缓存架构中&#xff0c;扩展性是一个重要影响因素。在很多场景中&#xff0c;例如广告投放、电商交易、游戏对战&#xff0c;流量是经常变化的。无论是主从还是集群模式&#xff0c;当大流量进入时&#xff0c;Redis 处理能力达到上限&…

【保姆级介绍下运维】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

爱校对新功能上线:领导人讲话和职务排序校对

我们很高兴地宣布&#xff0c;爱校对网站正式推出两项新功能&#xff1a;领导人讲话校对和领导人职务排序校对。这些新功能旨在帮助用户更准确地引用和整理领导人讲话内容&#xff0c;以及正确排列领导人的职务顺序。 领导人讲话校对 在撰写报告或文章时&#xff0c;引用领导…

数据结构与算法===优先队列

文章目录 前言一、优先队列二、应用场景三、代码实现总结 前言 之前写过很多数据结构与算法相关的了&#xff0c;今天看一个新的数据结构&#xff0c;优先队列。优先队列类似队列&#xff0c;却又优先于队列&#xff0c;是堆实现的。接下来详细看看。 一、优先队列 优先队列一…

Java面试八股之为什么要使用克隆

Java中为什么要使用克隆&#xff1f;怎么实现对象的克隆&#xff1f;深拷贝和浅拷贝的区别是什么 在Java中使用克隆主要有以下几个原因&#xff1a; 创建对象副本&#xff1a;克隆可以快速创建一个与原对象状态完全相同的副本&#xff0c;无需手动逐一复制每个属性。这种情况…

网络故障快速定位的秘诀 - 基于 AnaTraf 全流量回溯分析

网络故障是每个 IT 从业者都深有体会的头疼问题。当网络出现异常时,如何快速定位故障原因,恢复网络正常运行,是考验运维能力的关键所在。借助 AnaTraf 网络流量分析仪的全流量回溯分析功能,您可以轻松应对各种复杂的网络问题,实现快速故障定位。 1. 网络故障分析的痛点 网络故…

STM32_HAL_TIM_通用计时器_实现计时

项目思路 1使用定时器计数每秒一次 2使用一个变量记录定时器响应多少次 3使用UART将记录的次数发出 1STM32Cude设置 1配置时钟源 2打开UART 3打开TIM2 3.1界面介绍 3.2选项介绍 Slave Mode&#xff08;从模式&#xff09;&#xff1a;当设备被设置为从模式时&#xff0c…

flowable工作流设置审批人为指定角色+部门的实现方式

一、绘制流程图页面配置 1、指定固定审批角色组织的实现 如上图红框部分&#xff0c;需要修改此处为需求对应。比如此时红框不支持指定某个部门下的指定角色这种组合判断的审批人。则需要修改页面变成选完角色同时也选择上部门统一生成一个group标识。 修改完后&#xff0c;生…

海思Hi3065H 200MHz 高性能 RISCV32 A² MCU

这是一款海思自研的RISCV32内核的高性能实时控制专用MCU&#xff0c; 具有高性能、高集成度、高可靠性、易开发的特点&#xff0c;同时还有嵌入式AI能力。 CPU • RISC-V200MHzFPU 存储 • Up to 152KB Code Flash • 8KB Data Flash • 16KB SRAM 个人认为这是MCU梯队非常…

MES系统在电线电缆行业生产上的应用

MES系统在线缆行业的应用可以带来多重价值&#xff0c;包括提高生产效率、降低生产成本、提高产品质量、优化库存管理、改善生产环境和提高企业竞争力等方面。因此&#xff0c;在电线电缆行业中广泛应用MES系统可以提高企业的经济效益和社会效益&#xff0c;推动企业发展和行业…

Windows本地部署直播录屏利器Bililive-go并实现远程添加直播间录屏

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 1. Bililive-go与套件下载1.1 获取ffmpeg1.2 获取Bililive-go1.3 配置套件 2. 本地运行测试3. 录屏…

5 特征筛选

5 特征筛选 学习目标 掌握单特征分析的衡量指标知道 IV,PSI等指标含义知道多特征筛选的常用方法掌握Boruta,VIF,RFE,L1等特征筛选的使用方法1 单特征分析 什么是好特征?从几个角度衡量:覆盖度,区分度,相关性,稳定性 覆盖度 采集类,授权类,第三方数据在使用前都会分析…

java AOP环绕通知记录操作日志

一.创建数据库日志表 CREATE TABLE uc_system_log (id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 主键ID,user_code varchar(64) DEFAULT NULL COMMENT 用户编码,user_name varchar(128) DEFAULT NULL COMMENT 用户名称,is_login tinyint(4) NOT NULL DEFAULT 0 COMMENT 是…

吴恩达深度学习笔记:优化算法 (Optimization algorithms)2.3-2.5

目录 第二门课: 改善深层神经网络&#xff1a;超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)第二周&#xff1a;优化算法 (Optimization algorithms)2.3 指数加权平均数&#xff08;Exponential…

Java-数据库连接(JDBC小白教学)

&#xff01;文章最后附有完整代码&#xff01; 目录 &#x1f516;JDBC概述 &#x1f516;JDBC连接数据库 &#x1f516;添加数据&#xff08;insert&#xff09; &#x1f516;修改数据&#xff08;Update&#xff09; &#x1f516;删除数据&#xff08;delete&#x…

边缘计算教学实训解决方案

一、引言 随着物联网、5G通信技术的快速发展&#xff0c;边缘计算作为云计算的延伸和补充&#xff0c;正逐渐成为支撑智能物联网、实时数据分析等领域的重要技术。唯众旨在为职业院校设计一套全面的边缘计算教学实训体系&#xff0c;通过理论与实践相结合的方式&#xff0c;培…

深度剖析MyBatis的二级缓存

二级缓存的原理 MyBatis 二级缓存的原理是什么&#xff1f; 二级缓存的原理和一级缓存一样&#xff0c;第一次查询会将数据放到 缓存 中&#xff0c;然后第二次查询直接去缓存读取。但是一级缓存是基于 SqlSession 的&#xff0c;二级缓存是基于 mapper 的 namespace 的。也就是…

webhook 和 API:你了解吗

Webhooks 是许多 API 的补充。通过设置 webhook 系统&#xff0c;系统 B 可以注册接收有关系统 A 某些更改的通知。当更改发生时&#xff0c;系统 A 推送 更改到系统 B&#xff0c;通常是以发出 HTTP POST 请求的形式。 Webhooks 旨在消除或减少不断轮询数据的需要。但根据我的…

如何购买RAKsmart的国外高防服务器?

随着互联网的快速发展&#xff0c;网络安全问题日益凸显&#xff0c;特别是对于拥有在线业务的企业或个人来说&#xff0c;选择一款高防服务器显得尤为关键。美国RAKsmart作为知名的服务器提供商&#xff0c;其高防服务器因其卓越的性能和安全性&#xff0c;受到了广大用户的青…