当前位置: 首页 > news >正文

二叉树的最大深度

一、题目

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

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

示例 1:

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

示例 2:

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

提示:

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

二、源代码

#define MAX(a, b) ((b) > (a) ? (b) : (a))
int maxDepth(struct TreeNode* root) {if (root == NULL) {return 0;}int l_depth = maxDepth(root->left);int r_depth = maxDepth(root->right);return MAX(l_depth, r_depth) + 1;
}

三、解题思

1.宏定义 MAX(a, b)

这是一个宏定义,作用是获取两个整数中的最大值。

原理:通过三目运算符 (b) > (a) ? (b) : (a) 实现,若 b 大于 a 则返回 b,否则返回 a。

括号的作用:避免宏替换时因运算符优先级导致的逻辑错误(例如传入复杂表达式时)。

2. 函数 maxDepth(struct TreeNode* root)

函数功能:计算以 root 为根节点的二叉树的最大深度(从根节点到最远叶子节点的路径上的节点总数)。

(1)参数与返回值

参数 struct TreeNode* root:指向二叉树根节点的指针(struct TreeNode 是二叉树节点的结构体,通常包含数据域和左右子节点指针,如 int val; struct TreeNode *left; struct TreeNode *right;)。

返回值:int 类型,代表二叉树的最大深度。

(2)核心逻辑

if (root == NULL) {

    return 0;

}

终止条件:若当前节点 root 为 NULL(空节点),说明这是一棵空树(或子树),深度为 0,直接返回 0。

int l_depth = maxDepth(root->left);

int r_depth = maxDepth(root->right);

递归计算:

递归调用 maxDepth(root->left) 计算左子树的最大深度,结果存到 l_depth 中。

递归调用 maxDepth(root->right) 计算右子树的最大深度,结果存到 r_depth 中。

return MAX(l_depth, r_depth) + 1;

计算当前树的深度:

对于非空节点 root,其所在树的最大深度 = 左、右子树深度的最大值 + 1(加 1 是因为要包含当前节点本身)。

四、总结

这段代码通过递归分解问题:将整棵树的深度转化为「左子树深度」和「右子树深度」的最大值加 1,最终通过终止条件(空节点返回 0)回溯得到结果。

http://www.dtcms.com/a/380829.html

相关文章:

  • MySQL数据库-02(SQL语言基础)
  • Java POI实现对docx文件搜索指定文本进行批注/评论
  • Hugging Face NLP课程学习记录 - 3. 微调一个预训练模型
  • Java IO流(字节流和字符流)
  • Python 操作Office的PPT、Word、Excel,同时兼容WPS
  • SW - 剖面视图不显示剖面的显示选项
  • 基于STM32设计的智能蜂箱监测系统设计
  • 将Ansible与这些监控工具集成,实现自动化运维
  • USB3.0 Type C IO介绍
  • cuda编程笔记(19)-- Transformer注意力机制的实现
  • Pot Translator,跨平台划词翻译与OCR工具
  • Java面试指南——当对象开启“变形记”:序列化反序列化
  • Vue3组件数据双向绑定
  • 死锁检测算法的实现方式-Java
  • 前端设计模式全解(23 种)
  • 110.for循环执行顺序
  • 【Git】merge 分类
  • 2025最新超详细FreeRTOS入门教程:第十四章 FreeRTOS空闲任务与钩子函数
  • Parasoft 斩获 AutoSec 2025 优秀汽车 AI 测试创新方案奖
  • MATLAB3-2数据存储-台大郭彦甫
  • Spring Cloud Gateway基础复习
  • 【scikit-learn系列文章】
  • 后端编程开发路径:从入门到精通的系统性探索
  • 单片机esp32 基础调试 联网fetch http.begin(targetUrl);
  • rust语言 (1.88) egui (0.32.2) 学习笔记(逐行注释)(二十八)使用图片控件显示图片
  • 补 json的作用
  • windows 装虚拟机
  • mybatisplus 自定义注解和拦截器动态修改sql,实现数据权限控制
  • bat 批处理实现 FFmpeg 命令拼接 png 为 TextAtlas
  • 01数据结构-B树练习及B+树特点