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

news2024/11/25 20:56:42

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

日期: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 := 0
    
    if 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.coloradmin.cn/o/1257854.html

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

相关文章

SparkDesk知识库 + ChuanhuChatGPT前端 = 实现轻量化知识库问答

上一篇 讯飞星火知识库文档问答Web API的使用&#xff08;二&#xff09; 把星火知识库搞明白了&#xff1b; 然后又花了时间学习了一下gradio的一些基础内容: 在Gradio实现两个下拉框进行联动案例解读&#xff1a;change/click/input实践&#xff08;三&#xff09; 在Gradio实…

P8A002-CIA安全模型-配置Linux描述网络安全CIA模型之可用性案例

【预备知识】 可用性(Availability) 数据可用性是一种以使用者为中心的设计概念,易用性设计的重点在于让产品的设计能够符合使用者的习惯与需求。以互联网网站的设计为例,希望让使用者在浏览的过程中不会产生压力或感到挫折,并能让使用者在使用网站功能时,能用最少的努力…

PHP 双门双向门禁控制板实时监控源码

本示例使用设备&#xff1a; 实时网络双门双向门禁控制板可二次编程控制网络继电器远程开关-淘宝网 (taobao.com) <?PHPheader("content-type:text/html;charsetGBK");$ThisIpget_local_ip(); //获取电脑IP地址 $server udp://.$ThisIp.:39192; $sock…

前置任务之安装jdk

已经安装过很多次了&#xff0c;但是每次安装都要搜好几次才能找到正确的&#xff0c;离大谱。 1.打开 oracle官网 https://www.oracle.com 然后切换到Java archive 下载192版本的&#xff0c;页面搜索ctrlF&#xff0c;【Java SE Development Kit】或者【jdk-8u192-windows-…

低代码开发平台:构建企业数字化生态系统的关键利器

近年来&#xff0c;随着人工智能、大数据分析技术、云计算等领域的迅速发展&#xff0c;企业数字化转型已成为不可避免的趋势。政策层面也对这一转型给予了大力支持&#xff0c;通过多项举措推动技术创新、信息化应用和数字化产业的发展。然而&#xff0c;我们要清醒认识到&…

不会提问不打紧,不敢提问才要命

最近在星球里回答了球友提出来的一些问题&#xff0c;我都给了回复&#xff0c;不经过在明确问题、探索问题的过程&#xff0c;对我启发挺大&#xff0c;特此来记录下感受和感悟。 缘起 最近新加入球友提的问题&#xff0c;有几次&#xff0c;我第一时间没看懂&#xff0c;甚…

Oracle Linux 9.3 发布

导读Oracle Linux 9 系列发布了第 3 个版本更新&#xff0c;支持 64 位 Intel 和 AMD (x86_64) 以及 64 位 Arm (aarch64) 平台。与所有的 Oracle Linux 版本一样&#xff0c;此版本与相应 RHEL 版本 100% 应用二进制兼容。 对于 x86_64 和 aarch64 架构&#xff0c;Oracle Li…

关于高斯核是实现尺度空间变换的唯一性思考

受到自己的启发&#xff0c;唯一性证明有了思路&#xff1a; 谁的一阶导数是自己&#xff0c;exp&#xff08;x&#xff09;&#xff0c;只有是自己&#xff0c;才能保持自己在其中。 为什么不能是exp&#xff08;x&#xff09;呢&#xff1f;不变导致图像不会模糊&#xff0…

微软发布了Orca 2,一对小型语言模型,它们的性能超越了体积更大的同类产品

尽管全球目睹了OpenAI的权力斗争和大规模辞职&#xff0c;但作为AI领域的长期支持者&#xff0c;微软并没有放慢自己的人工智能努力。今天&#xff0c;由萨提亚纳德拉领导的公司研究部门发布了Orca 2&#xff0c;这是一对小型语言模型&#xff0c;它们在零样本设置下对复杂推理…

基于PLC的物料分拣控制传送带控制系统设计

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;物料分拣 获取完整论文报告PLC梯形图工程源文件 传送带在先进制造领域中扮演着极其重要的角色。它可以搬运货物、分拣物品、代替人的繁重劳动。可以实现生产的机械化和自动化&#xff0c;能在有害环境下操作以保护人身安全…

条形码格式

条形码格式 简述EAN码EAN-13EAN-8 UPC码UPC-AUPC-E 简述 EAN码 EAN码&#xff08;European Article Number&#xff09;是国际物品编码协会制定的一种全球通用的商用条码。EAN码分为&#xff1a;标准版&#xff08;EAN-13&#xff09; 和 缩短版&#xff08;EAN-8&#xff09…

Eolink 通过多项信创环境适配认证,信创生态兼容更全面!

近日&#xff0c;Eolink 通过海光、龙芯、统信、达梦以及 TiDB 数据库等多个兼容性认证&#xff0c;信创生态适配能力全面提升。 信息技术应用创新的自主可控是国家实现科技自立自强的一项重要发展战略。作为国内 API 全生命周期管理理念的先行者&#xff0c;Eolink 积极响应国…

Java学习路线第一篇:Java基础(2)

这篇则分享Java学习路线第一part&#xff1a;Java基础&#xff08;2&#xff09; 从看到这篇内容开始&#xff0c;你就是被选定的天命骚年&#xff0c;将承担起学完Java基础的使命&#xff0c;本使命为单向契约&#xff0c;你可选择YES或者选择YES。 具体路线安排&#xff1a…

位图/布隆过滤器+海量数据处理总结

位图 题目&#xff1a; 第一种方法&#xff1a;二分查找。虽然二分的时间复杂度为o(log n),但是这个方法是不可行的&#xff0c;我们就算假设这40亿个数据是已经排序完成了的数据&#xff0c;但是40亿个整数在内存需要消耗的内存就是差不多16G&#xff0c;这个消耗是非常巨大的…

Java实现集合和Excel文件相互转换

目录 一、集合转化为Excel文件二、Excel文件转化为集合 一、集合转化为Excel文件 效果如下&#xff0c;是将集合转化为Excel文件&#xff0c;Excel包含合并单元格。 实体类&#xff1a; Data public class ClassGrade {/** 年级 */private String grade;/** 班主任 */privat…

其利天下技术总监冯建武受邀出席“2023年电子工程师大会”并作主题演讲

2023年11月23日&#xff0c;由华秋电子发烧友主办的“2023年电子工程师大会暨第三届社区年度颁奖活动”在深圳新一代产业园成功举行。本次年度颁奖活动邀请了高校教授、企业高管、行业专家、资深电子工程师等共300多人出席。聚焦“电机驱动技术”、“开源硬件”、“OpenHarmony…

sCrypt 在英国伦敦 Exeter 大学讲学

6月5日&#xff0c;sCrypt CEO晓晖和他的两位同事在英国伦敦Exeter大学举行了一场精彩的讲座。刘晓晖向听众们详细介绍了sCrypt智能合约开平台&#xff0c;并演示了如何使用sCrypt来开发基于比特币的智能合约。他用生动形象的语言&#xff0c;深入浅出地解释了这个领域复杂而又…

三方支付接口成为了电商竞争力的新动力

在当前快速发展的互联网时代&#xff0c;随着电子商务行业的兴起&#xff0c;支付体验已经成为企业获取竞争优势的重要因素。一个快速、安全、便捷的支付环节不仅可以提升用户的体验&#xff0c;还能有效促进交易的完成。在众多支付解决方案中&#xff0c;三方支付接口因其独特…

家用净水器产业分析:预计2029年将达到293亿美元

近年来&#xff0c;政府陆续出台了一系列鼓励居民安装家用净水器的政策措施。这些政策不仅提高了消费者的购买积极性&#xff0c;还促进了相关企业的研发和生产。此外&#xff0c;各级媒体也对家用净水器的重要性进行广泛宣传&#xff0c;增加了公众的认知度和接受度。 随着科技…

动起来,数据不散漏:上海迅软DSE助您解锁员工外带电脑信息安全新境界!

笔记本电脑作为企业数据泄密主要的途径之一&#xff0c;当员工携带着存放企业重要技术资料的笔记本在外办公时&#xff0c;很容易由于频繁的流动性让数据面临着丢失、恶意泄密等巨大风险&#xff0c;对此企事业单位需要通过一定的管理手段加以安全防护管控。 迅软DSE解决方案 一…