1. 题目
描述
求给定二叉树的最大深度,
深度是指树的根节点到任一叶子节点路径上节点的数量。
最大深度是所有叶子节点的深度的最大值。
(注:叶子节点是指没有子节点的节点。)
数据范围:0 ≤n≤100000,树上每个节点的val满足∣val∣≤100
要求: 时间复杂度 O(n)
示例1
输入:
{1,2}
返回值:
2
示例2
输入:
{1,2,3,4,#,#,5}
返回值:
3
2. 解题思路
二叉树的最大深度(高度)可以通过递归来实现。对于一个节点来说,最大深度(高度)可以这样计算:左右子树的最大深度(高度)+1(1为当前节点对应的高度)。
先来看看是否满足递归的条件:
可以看出,求解二叉树的最大深度(高度)可以采用递归。对于一个节点来说,最大深度(高度)为:左右子树的最大深度(高度)+1(1为当前节点对应的高度)。因此对应的递推公式如下:
如果文字描述的不太清楚,你可以参考视频的详细讲解。
- Python版本:https://www.bilibili.com/cheese/play/ep1371743
- Java版本:https://www.bilibili.com/cheese/play/ep1367109
- Golang版本:https://www.bilibili.com/cheese/play/ep1364649
3. 编码实现
核心代码如下:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return int整型
*/
func maxDepth(root *TreeNode) int {
// write code here
// 2. 递归终止条件:节点为空,深度为0
if root == nil {
return 0
}
// 1. 问题分解(递推公式)
// 1.1 获取左子树的深度
leftMax := maxDepth(root.Left)
// 1.2 获取右子树的深度
rightMax := maxDepth(root.Right)
// 左右子树的最大值
maxValue := int(math.Max(float64(leftMax), float64(rightMax)))
// 1.3 返回:左右子树深度的最大值+1(当前节点)
return maxValue + 1
}
具体完整代码你可以参考下面视频的详细讲解。
- Python版本:https://www.bilibili.com/cheese/play/ep1371743
- Java版本:https://www.bilibili.com/cheese/play/ep1367109
- Golang版本:https://www.bilibili.com/cheese/play/ep1364649
4.小结
二叉树的最大深度(高度)可以通过递归来实现。对于一个节点来说,最大深度(高度)可以这样计算:左右子树的最大深度(高度)+1(1为当前节点对应的高度)。
《数据结构与算法》深度精讲课程正式上线啦!七大核心算法模块全解析:
✅ 链表 ✅ 二叉树 ✅二分查找、排序 ✅ 堆、栈、队列 ✅回溯算法 ✅ 哈希算法 ✅ 动态规划
无论你是备战笔试面试、提升代码效率,还是突破技术瓶颈,这套课程都将为你构建扎实的算法思维底座。🔥立即加入学习打卡,与千名开发者共同进阶!
- Python编码实现:https://www.bilibili.com/cheese/play/ss897667807
- Java编码实现:https://www.bilibili.com/cheese/play/ss161443488
- Golang编码实现:https://www.bilibili.com/cheese/play/ss63997
对于二叉树的相关算法,我们总结了一套【可视化+图解】方法,依据此方法来解决相关问题,算法变得易于理解,写出来的代码可读性高也不容易出错。具体也可以参考视频详细讲解。
今日佳句:云想衣裳花想容,春风拂槛露华浓。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。