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

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

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

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

在这里插入图片描述

文章目录

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

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

题目链接

二叉树的最大深度_牛客题霸_牛客网 (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.hqwc.cn/news/702791.html

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

相关文章

C++ 程序员常用的VScode的插件

vscode中好用的插件 Better CommentsBookmarksC/C ThemeChinese (Simplified) (简体中文) Language Pack for Visual Studio CodeclangdClang-FormatCodeLLDBCMakeCMake ToolsCode RunnerCode Spell CheckerCodeSnapColor Highlightvscode-mindmapDraw.io IntegrationError Len…

图文详解JUC:Wait与Sleep的区别与细节

目录 一.Wait() 二.Sleep() 三.总结Wait()与Sleep()的区别 一.Wait() 在Java中&#xff0c;wait() 方法是 Object类中的一个方法&#xff0c;用于线程间的协作。当一个线程调用wait() 方法时&#xff0c;它会释放对象的锁并进入等待状态&#xff0c;直到其他线程调用相同对…

常用的一些字符转换工具--web(在线进制转换)

十进制 转2进制&#xff0c; 16进制 十进制浮点数转16进制&#xff08;4个Byte) http://www.speedfly.cn/tools/hexconvert/

基于EBAZ4205矿板的图像处理:11阈值系数可调的图像局部阈值二值化

基于EBAZ4205矿板的图像处理&#xff1a;11阈值系数可调的图像局部阈值二值化 先看效果 还是一样拿我的pynq当模特&#xff0c;然后用usb——HDMI采集卡把输出图像采集到电脑上。 注意看右边mobelxtem中的通过串口调节的参数&#xff0c; 我这里是实现了阈值系数可调的局部阈…

深入 Go 语言:使用 math/rand 包实现高效随机数生成

深入 Go 语言&#xff1a;使用 math/rand 包实现高效随机数生成 介绍math/rand 包的核心功能设计哲学应用场景 基础使用方法初始化和种子设置设置种子创建私有随机数生成器 基础函数详解生成整数生成特定范围的整数生成浮点数随机置乱数组 进阶技巧随机数的统计属性生成正态分布…

【MATLAB】Enigma机加密原理与自实现

文章目录 什么是EnigmaEnigma机加密通信流程Enigma的物理构造Enigma的加密设置Enigma加密通信密码重新设置Enigma加密消息拼接注意 Enigma的解密分解设置Enigma解密通信密码重新设置Enigma解密消息 Enigma的弱点MATLAB自实现Enigma加密与解密Enigma_functionRotate_functiontes…

macOS上使用qt creator编译调试ffmpeg.c

1 前言 上文macOS上将ffmpeg.c编译成Framework介绍了使用xocde将ffmpeg.c编译成Framework的方法&#xff0c;这里列举另外一种办法&#xff0c;就是用qt creator来完成这件事情。 编译环境如下&#xff1a; qt creator 9.0.2&#xff1b;ffmpeg release/6.1; 2 编译ffmpeg.c 大…

Unity WebGL全屏显示

一、删除footer节点 二、删除最下面点击事件绑定 修改Canvas宽高 canvas.style.width "960px"; canvas.style.height "600px"; 改成 canvas.style.width document.documentElement.clientWidth"px"; canvas.style.height document.document…

JavaScript循环结构

JS循环结构 1 while结构2 for循环3 foreach循环 1 while结构 几乎和JAVA一致 代码 /* 打印99 乘法表 */var i 1;while(i < 9){var j 1;while(j < i){document.write(j"*"i""i*j" ");j;}document.write("<hr/>");i…

runtime pm的实例分析

概念 运行时的PM与前文描述的系统级挂起到RAM时候的PM不太一样&#xff0c;它是针对单个设备&#xff0c;指系统在非睡眠状态的情况下&#xff0c;某个设备在空闲时可以进入运行时挂起状态&#xff0c;而在不是空闲时执行运行时恢复使得设备进入正常工作状态&#xff0c;如此&…

Linux-CentOS-7忘记密码-修改登录密码图文详解

Linux-CentOS-7忘记密码-修改登录密码图文详解 1.重启系统&#xff1a; 在登录界面&#xff0c;选择要登录的用户并点击"Power"按钮&#xff0c;然后选择"Restart"或"Reboot"重新启动系统。 在系统启动时持续按下 “e” 键进入编辑模式。 2…

抖店曝光率高,转化低,不知道怎么提升转化率?试试这四个方法

大家好&#xff0c;我是醒醒团队电商花花。 我们现在做抖音小店的商家或多或少都会遇到不出单&#xff0c;转化低的各种问题。 明明店铺的曝光不低&#xff0c;访客也不少&#xff0c;就是没转化。 下面我根据我们做店的经验&#xff0c;给大家分享一些问题所在&#xff0c;…