二叉树的最大深度(C语言详解版)

一、摘要

嗨喽呀大家,leetcode每日一题又和大家见面啦,今天要讲的是104.二叉树的最大深度,思路互相学习,有什么不足的地方欢迎指正!好啦让我们开始吧!!!

二、题目简介

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

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

示例 1:

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

示例 2:

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

提示:

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

三、思路详解

针对这道题我先补充一个递归的图像,能够帮我更好理解它递归的过程。图画由于是手画有点潦草

1. 递归法(深度优先搜索)

递归法是求解二叉树问题的常用方法。我们可以使用深度优先搜索(DFS)来遍历二叉树,找到从根节点到最远叶子节点的最长路径。

思路:
  • 如果当前节点为空,返回深度 0。

  • 递归计算左子树和右子树的最大深度。

  • 当前节点的最大深度等于左子树和右子树的最大深度中的较大值加 1。

代码实现:
int maxDepth(struct TreeNode* root) {
    if (root == NULL) return 0;  // 空节点的深度为0

    // 递归计算左子树和右子树的最大深度
    int leftDepth = maxDepth(root->left);
    int rightDepth = maxDepth(root->right);

    // 当前节点的最大深度为左右子树最大深度的较大值加1
    return (leftDepth > rightDepth ? leftDepth : rightDepth) + 1;
}

2. 迭代法(广度优先搜索)

迭代法使用队列来实现广度优先搜索(BFS),可以避免递归的深度限制问题。

思路:
  • 使用一个队列来存储待访问的节点,每个节点附带其深度信息。

  • 从根节点开始,将其深度设为 1。

  • 遍历队列中的每个节点,更新最大深度。

  • 将左右子节点(如果存在)加入队列,深度加 1。

代码实现:
int maxDepth(struct TreeNode* root) {
    if (root == NULL) return 0;  // 空树的最大深度为0

    struct TreeNode* queue[10000];  // 队列,假设最多10000个节点
    int depth[10000];  // 每个节点的深度
    int front = 0, rear = 0;
    int maxDepth = 0;

    queue[rear] = root;
    depth[rear] = 1;
    rear++;

    while (front < rear) {
        struct TreeNode* node = queue[front];
        int currentDepth = depth[front];
        front++;

        maxDepth = (currentDepth > maxDepth) ? currentDepth : maxDepth;

        if (node->left) {
            queue[rear] = node->left;
            depth[rear] = currentDepth + 1;
            rear++;
        }
        if (node->right) {
            queue[rear] = node->right;
            depth[rear] = currentDepth + 1;
            rear++;
        }
    }

    return maxDepth;
}

3. 前,中,后序遍历

思路:
  • 后序遍历:先计算左子树和右子树的最大深度,再处理当前节点。

  • 前序遍历:先处理当前节点,再计算左子树和右子树的最大深度。

  • 中序遍历:先计算左子树的最大深度,处理当前节点,再计算右子树的最大深度。

  • 在计算最大深度时,这些遍历顺序并没有实际影响,因为左右子树的最大深度是独立计算的,最终结果只取决于左右子树的最大深度。

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

  • 无论采用哪种遍历顺序(前序、中序、后序),最终都需要计算左子树和右子树的最大深度,并取较大值加 1。

代码实现:
int maxDepth(struct TreeNode* root) {
    if (root == NULL) return 0;  // 空节点的深度为0

    // 递归计算左子树和右子树的最大深度
    int leftDepth = maxDepth(root->left);
    int rightDepth = maxDepth(root->right);

    // 当前节点的最大深度为左右子树最大深度的较大值加1
    return (leftDepth > rightDepth ? leftDepth : rightDepth) + 1;
}

好啦,其实这类型的题目大致思路都是一样的,看完这些思路之后可以针对性的多做几道练习,今天的讲解就到这里啦。我们明天见! 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV imread函数读取图像__实例详解

OpenCV imread函数读取图像__实例详解 本文目录&#xff1a; 零、时光宝盒 一、imread函数定义 二、imread函数支持的文件格式 三、imread函数flags参数详解 &#xff08;3.1&#xff09;、Flags-1时&#xff0c;样返回加载的图像&#xff08;使用alpha通道&#xff0c;否…

VMware虚拟机安装macOS11

1.安装虚拟机 如果尚未安装虚拟机&#xff0c;请先进行安装。地址&#xff1a;VMware17下载地址​​​​​​ 2、下载苹果镜像文件 macOS Big Sur 11.0.1 (20B29) 3、下载unlock文件&#xff08;目的是开启VMware的macOS选项功能&#xff09; https://download.csdn.net/d…

探究 Facebook 隐私安全发展方向,未来走向何方?

随着社交媒体的普及&#xff0c;隐私和数据安全问题成为了全球关注的焦点。Facebook&#xff0c;作为全球最大的社交平台之一&#xff0c;其隐私安全问题尤其引人注目。近年来&#xff0c;随着用户数据泄露事件的不断发生&#xff0c;Facebook 不断调整其隐私政策&#xff0c;探…

jQuery阶段总结(二维表+思维导图)

引言 经过23天的学习&#xff0c;期间有期末考试&#xff0c;有放假等插曲。本来应该在学校里学习&#xff0c;但是特殊原因&#xff0c;让回家了。但是在家学习的过程&#xff0c;虽然在学&#xff0c;很让我感觉到不一样。但是效果始终还是差点的&#xff0c;本来17、18号左右…

LabVIEW太阳能照明监控系统

在公共照明领域&#xff0c;传统的电力照明系统存在高能耗和维护不便等问题。利用LabVIEW开发太阳能照明监控系统&#xff0c;通过智能控制和实时监测&#xff0c;提高能源利用效率&#xff0c;降低维护成本&#xff0c;实现照明系统的可持续发展。 ​ 项目背景 随着能源危机…

Golang Gin系列-8:单元测试与调试技术

在本章中&#xff0c;我们将探讨如何为Gin应用程序编写单元测试&#xff0c;使用有效的调试技术&#xff0c;以及优化性能。这包括设置测试环境、为处理程序和中间件编写测试、使用日志记录、使用调试工具以及分析应用程序以提高性能。 为Gin应用程序编写单元测试 设置测试环境…

Spring Boot 邂逅Netty:构建高性能网络应用的奇妙之旅

一、引言 在当今数字化时代&#xff0c;构建高效、可靠的网络应用是开发者面临的重要挑战。Spring Boot 作为一款强大的 Java 开发框架&#xff0c;以其快速开发、简洁配置和丰富的生态支持&#xff0c;深受广大开发者喜爱。而 Netty 作为高性能、异步的网络通信框架&#xff…

科普篇 | “机架、塔式、刀片”三类服务器对比

一、引言 在互联网的世界里&#xff0c;服务器就像是默默运转的超级大脑&#xff0c;支撑着我们日常使用的各种网络服务。今天&#xff0c;咱们来聊聊服务器家族中的三位 “明星成员”&#xff1a;机架式服务器、塔式服务器和刀片式服务器。如果把互联网比作一座庞大的城市&…

中民集团张敏海为国际和平发展和国际经贸合作增添更多活力

中民集团生物科技有限公司总经理、中国战略与管理研究会志愿军研究会会长助理张敏海&#xff0c;受韩国GSL集团和潘基文基金会的邀请&#xff0c;在韩国济州岛&#xff0c;与前联合国秘书长、海南博鳌论坛理事长潘基文先生&#xff0c;澳洲大使、潘基文助理、GSL集团总顾问金奉…

2025年国产化推进.NET跨平台应用框架推荐

2025年国产化推进.NET跨平台应用框架推荐 1. .NET MAUI NET MAUI是一个开源、免费&#xff08;MIT License&#xff09;的跨平台框架&#xff08;支持Android、iOS、macOS 和 Windows多平台运行&#xff09;&#xff0c;是 Xamarin.Forms 的进化版&#xff0c;从移动场景扩展到…

数据库SQLite和SCADA DIAView应用教程

课程简介 此系列课程大纲主要包含七个课时。主要使用到的开发工具有&#xff1a;SQLite studio 和 SCADA DIAView。详细的可成内容大概如下&#xff1a; 1、SQLite 可视化管理工具SQLite Studio &#xff1a;打开数据库和查询数据&#xff1b;查看视频 2、创建6个变量&#x…

Redis vs. 其他数据库:深度解析,如何选择最适合的数据库?

一、如何为项目选择合适的数据库&#xff1f; 选择合适的数据库是一个复杂的过程&#xff0c;需要综合考虑多个因素。下面几个维度来详细阐述&#xff1a; 1.数据模型 关系型数据库&#xff08;RDBMS&#xff09;&#xff1a;适用于高度结构化、关联性强的数据&#xff0c;如电…

c#使用log4Net配置日志文件

1.# 写一个通用类 LogHelper using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using log4net;namespace WindowsFormsApplication22 {public class LogHelper{static ILog mylog LogManager.GetLogge…

2_高并发内存池_各层级的框架设计及ThreadCache(线程缓存)申请内存设计

一、高并发内存池框架设计 高并发池框架设计&#xff0c;特别是针对内存池的设计&#xff0c;需要充分考虑多线程环境下&#xff1a; 性能问题锁竞争问题内存碎片问题 高并发内存池的整体框架设计旨在提高内存的申请和释放效率&#xff0c;减少锁竞争和内存碎片。 高并发内存…

【深入理解FFMPEG】命令行阅读笔记

这里写自定义目录标题 第三章 FFmpeg工具使用基础3.1 ffmpeg常用命令3.1.13.1.3 转码流程 3.2 ffprobe 常用命令3.2.1 ffprobe常用参数3.2.2 ffprobe 使用示例 3.3 ffplay常用命令3.3.1 ffplay常用参数3.3.2 ffplay高级参数3.3.4 ffplay快捷键 第4章 封装与解封装4.1 视频文件转…

5. 马科维茨资产组合模型+政策意图AI金融智能体(Qwen-Max)增强方案(理论+Python实战)

目录 0. 承前1. AI金融智能体1.1 What is AI金融智能体1.2 Why is AI金融智能体1.3 How to AI金融智能体 2. 数据要素&计算流程2.1 参数集设置2.2 数据获取&预处理2.3 收益率计算2.4 因子构建与预期收益率计算2.5 协方差矩阵计算2.6 投资组合优化2.7 持仓筛选2.8 AI金融…

2013年蓝桥杯第四届CC++大学B组真题及代码

目录 1A&#xff1a;高斯日记&#xff08;日期计算&#xff09; 2B&#xff1a;马虎的算式&#xff08;暴力模拟&#xff09; 3C&#xff1a;第39级台阶&#xff08;dfs或dp&#xff09; 4D&#xff1a;黄金连分数&#xff08;递推大数运算&#xff09; 5E&#xff1a;前缀…

day1-->day7| 机器学习(吴恩达)学习笔记

一、监督学习(Supervised learning) 给予每一个Input–>对应一个output 1.1&#xff1a;样例&#xff1a; 也就是针对每一个输入样例input&#xff0c;我们都给他制定一个function&#xff0c;使得它有确定的Output映射输出。 1.2&#xff1a;两大监督学习经典样例&…

git Bash通过SSH key 登录github的详细步骤

1 问题 通过在windows 终端中的通过git登录github 不再是通过密码登录了&#xff0c;需要本地生成一个密钥&#xff0c;配置到gihub中才能使用 2 步骤 &#xff08;1&#xff09;首先配置用户名和邮箱 git config --global user.name "用户名"git config --global…

15.7k!DISM++一款快捷的系统优化工具

软件介绍 链接 软件介绍 dism是一款由初雨团队开发的win系统优化工具&#xff0c;可当作是微软系统命令行工具dism的GUI版本。可用作系统垃圾清除、启动项管理、程序卸载、驱动管理、系统优化等 该工具个人感觉最重要的就是系统优化选项&#xff0c;它将一些实用、无用或者没…