新闻详情

新闻详情

首页 / 资讯中心 / 详情

LeetCode-Go 题解:104. Maximum Depth of Binary Tree(二叉树最大深度)递归实现与源码分析

发布时间:2026/9/11 16:36:14来源:尧图网络
LeetCode-Go 题解:104. Maximum Depth of Binary Tree(二叉树最大深度)递归实现与源码分析
LeetCode-Go 题解104. Maximum Depth of Binary Tree二叉树最大深度递归实现与源码分析【免费下载链接】LeetCode-Go✅ Solutions to LeetCode by Go, 100% test coverage, runtime beats 100% | LeetCode 题解项目地址: https://gitcode.com/GitHub_Trending/le/LeetCode-Go导读本文围绕 LeetCode-Go 仓库中 104. Maximum Depth of Binary Tree 一题展开完整解析求二叉树最大深度这一基础树题目的题意、递归解题思路、Go 源码实现与测试用例。读完本文你将掌握二叉树深度类题目的标准递归套路分治左右子树取最大值再加一并理解 LeetCode-Go 仓库中二叉树测试数据的构造方式[]int层序转树可直接套用到 0559N 叉树最大深度、0111最小深度等同类型题目上。题目描述Given a binary tree, find its maximum depth.The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.Note: A leaf is a node with no children.Example:Given binary tree [3,9,20,null,null,15,7],3 / \ 9 20 / \ 15 7return its depth 3.题目大意要求输出一棵树的最大高度最大深度。最大深度的定义是从根节点到最远叶子节点的最长路径上的节点总数。叶子节点指没有子节点的节点。上述示例中最长路径为3 - 20 - 15或3 - 20 - 7路径上共 3 个节点因此返回 3。解题思路这一题递归遍历即可分别求出根节点左子树的高度和右子树的高度取出两者的最大值再加一加上根节点自身即为整棵树的总高度。其正确性来源于最大深度的递归结构空树根节点为nil的深度为 0非空树的深度 max(左子树深度, 右子树深度) 1。这正是典型的**分治Divide and Conquer**思路把整棵树的最大深度分解为左右子树的最大深度两个规模更小的子问题子问题与原问题同构天然适合用递归表达。源码级实现解析LeetCode-Go 仓库中本题的解法位于 leetcode/0104.Maximum-Depth-of-Binary-Tree/104. Maximum Depth of Binary Tree.go核心代码如下type TreeNode structures.TreeNode func maxDepth(root *TreeNode) int { if root nil { return 0 } return max(maxDepth(root.Left), maxDepth(root.Right)) 1 } func max(a int, b int) int { if a b { return a } return b }逐行解读递归出口root nil时返回 0。空节点的深度为 0这一条件同时兜底了空树与叶子节点的左右子节点保证递归必然终止。递归体maxDepth(root.Left)与maxDepth(root.Right)分别求解左右子树深度max取二者较大值后 11表示计入当前根节点这一层。辅助函数max仓库在题解文件中内联定义了max(a, b int) int避免依赖额外的第三方库保证单文件可独立运行。TreeNode 结构来自仓库公共包题解文件第 8 行通过type TreeNode structures.TreeNode类型别名引入了仓库公共数据结构包structures中的二叉树节点其定义位于 structures/TreeNode.gotype TreeNode struct { Val int Left *TreeNode Right *TreeNode }Val为节点值Left/Right分别指向左、右孩子。LeetCode-Go 仓库中所有二叉树题目如前序/中序/后序遍历、树的序列化等均复用该结构接口与 LeetCode 官方给出的节点定义完全一致因此题解可以无缝提交。复杂度分析时间复杂度O(n)每个节点恰好被访问一次空间复杂度O(h)h 为树的高度即递归调用栈的最大深度。最坏情况链状树下 h n退化为 O(n)平均/平衡情况下为 O(log n)。测试用例与验证本题测试位于 leetcode/0104.Maximum-Depth-of-Binary-Tree/104. Maximum Depth of Binary Tree_test.go共覆盖 3 组用例输入层序数组对应树期望输出[]空树0[3, 9, 20, NULL, NULL, 15, 7]题目示例树3[1, 2, 3, 4, NULL, NULL, NULL, 5]偏斜的树4其中structures.NULL是仓库定义的占位常量用于在层序数组中标记空节点其值为-1 63见 structures/TreeNode.go。测试通过structures.Ints2TreeNode(p.one)将层序数组构造成二叉树后调用maxDepth再与期望值比对任一用例不通过都会以t.Fatalf终止。仓库中Ints2TreeNode的构造逻辑structures/TreeNode.go使用**队列按层序BFS**建树以数组首元素为根逐个为当前队首节点挂载左、右孩子遇NULL值则跳过该子节点值得对照阅读以理解测试数据的含义。第三组用例[1, 2, 3, 4, NULL, NULL, NULL, 5]构造的树结构为1 / \ 2 3 / 4 / 5最长路径1 - 2 - 4 - 5共 4 层验证了递归解法在偏向一侧的树上同样正确。如何在本地运行验证仓库根目录的 gotest.sh 提供了全量测试脚本其核心命令为go test -covermodeatomic -coverprofilecoverage.txt ./leetcode/...若只想验证本题可进入 leetcode/0104.Maximum-Depth-of-Binary-Tree 目录单独执行go test -v仓库根目录 go.mod 中声明了 Go 1.19并通过replace指令将github.com/halfrost/LeetCode-Go/structures指向本地./structures目录因此题解文件可以直接复用公共数据结构而无需联网拉取依赖。延伸思考本题在仓库中的同类应用递归求深度是二叉树问题的基础模板LeetCode-Go 仓库中多处复用了这一思路0559. Maximum Depth of N-ary TreeN 叉树的最大深度把左右子树取 max推广为遍历所有孩子节点取 max0111. Minimum Depth of Binary Tree求最小深度与本题对称但需额外处理单边为空的边界情况0104 题解文件 本身也是很多递归类题目如判断平衡二叉树、计算直径等的子过程。理解 104 题的递归写法是掌握上述一系列树形递归问题的起点。除递归外本题也可用层序遍历BFS 计数层数的方式求解仓库当前提供的是递归版本这也是树深度类题目最简洁直观的标准解法。【免费下载链接】LeetCode-Go✅ Solutions to LeetCode by Go, 100% test coverage, runtime beats 100% | LeetCode 题解项目地址: https://gitcode.com/GitHub_Trending/le/LeetCode-Go创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

gRPC Handshaker 框架深入解析:可插拔的连接协商与安全握手架构 2026/9/11 17:09:22

gRPC Handshaker 框架深入解析:可插拔的连接协商与安全握手架构

gRPC Handshaker 框架深入解析:可插拔的连接协商与安全握手架构 【免费下载链接】grpc C based gRPC (C, Python, Ruby, Objective-C, PHP, C#) 项目地址: https://gitcode.com/GitHub_Trending/gr/grpc gRPC 的 src/core/handshaker/ 目录承载了核心的 Hand…

阅读更多 →
1.设置为固定IP,防止搬工位IP变化 2.禁止windows更新 2026/9/11 17:09:22

1.设置为固定IP,防止搬工位IP变化 2.禁止windows更新

1)固定IP2)禁止windows更新关闭 Windows Update 服务点击停止

阅读更多 →
收集SNMP数据到OpenTelemetry 2026/9/11 17:09:22

收集SNMP数据到OpenTelemetry

1. 概述 我记得老年间SNMP是非常流行的监控协议,因为它的设计真的很用心很精细。那时候懂SNMP的人都自我感觉很好的,每个人都 显出似乎很懂技术的样子☺。后来到了移动互联网的时代,这个协议就不那么吃香了,因为它只是个适合局域…

阅读更多 →
结构化提示词提升AI写作效率与爆款率 2026/9/11 17:09:22

结构化提示词提升AI写作效率与爆款率

1. 为什么新手博主需要结构化提示词刚入行的内容创作者常面临三大痛点:创作效率低、内容质量不稳定、平台算法难把握。我见过太多新手博主每天花5-6小时憋一篇千字文,发布后阅读量却不过百。结构化提示词正是解决这些痛点的利器——它就像烹饪时的标准化…

阅读更多 →
从坐标系到QGIS:北京shp数据包标准化处理全流程 2026/9/11 17:09:22

从坐标系到QGIS:北京shp数据包标准化处理全流程

简介:这份10类数据包面向GIS、城市规划、资源管理等从业者,汇聚2024年北京市最新版行政边界与人文地理要素,提供省、市、县区、乡镇街道四级区划,以及水系、道路、大学、景点、高程、土壤类型等完整图层,可直接支撑空间…

阅读更多 →
Spring Boot房屋租赁系统毕设实战:数据建模、核心接口与答辩要点 2026/9/11 17:06:21

Spring Boot房屋租赁系统毕设实战:数据建模、核心接口与答辩要点

简介:这是一份基于Spring Boot的房屋租赁系统毕业设计资料包,面向计算机相关专业毕业生或需要完成类似课题的开发者。系统采用Java与MySQL开发,后端基于Spring Boot框架,整合Mybatis、Ajax、Vue等技术,整体采用B/S架构…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞