「这是我参与11月更文挑战的第23天,活动详情查看:2021最后一次更文挑战」
前言
力扣第104题 二叉树的最大深度
如下所示:
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7]
,
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
一、思路
题目意思很简单,就是计算二叉树的深度
二叉树深度:是指从根节点到最远叶子节点所经过的节点数量。(也就是说根节点本身长度为
1
)
如下图所示的二叉树的深度为 4
,具体的路径为 1 -> 2 -> 5 -> 8
。
这一题思路的话是比较明确的,分为以下两个步骤:
- 维护一个结果值
ret
- 遍历整个二叉树,实时更新
ret
值即可
那如何更新 ret
的值呢?
当然是使用递归来遍历的,只要当前节点不为空 null
我们就让当前的路径长度加一 +1
即可。且只有当前路径长度大于 ret
的长度时,我们才更新 ret
的值,以保证得到的是最大深度。
举个例子
此处以示例中的 [3,9,20,null,null,15,7]
作为例子,二叉树如下图所示:
ret:最终结果,初始值为
0
deep:当前路径长度
- 遍历到根节点
3
,当前路径长度更新deep = 1
,ret = max(ret, deep) = 1
- 继续遍历左孩子
9
,当前路径长度更新deop = 2
,ret = max(ret, deep) = 2
- 因节点
9
没有左右孩子了,所以继续遍历3
的右孩子20
,当前路径长度更新deop = 2
,无需更新ret
- 继续遍历节点
20
的左孩子15
,当前路径长度更新deop = 3
,ret = max(ret, deep) = 3
- 因节点
15
没有左右孩子了,所以继续遍历20
的右孩子7
,当前路径长度更新deop = 3
,无需更新ret
- 至上已完成二叉树的遍历,返回结果
3
即可
二、实现
实现代码
实现代码与思路中保持一致,使用递归看起来还是很清晰的。
int ret = 0;
public int maxDepth(TreeNode root) {
dfs(root, 0);
return ret;
}
public void dfs(TreeNode root, int deep){
ret = Math.max(ret, deep);
if (root == null){
return;
}
dfs(root.left, deep+1);
dfs(root.right, deep+1);
}
测试代码
public static void main(String[] args) {
TreeNode treeNode = new TreeNode(13,
new TreeNode(9, null, null),
new TreeNode(20, new TreeNode(15), new TreeNode(7)));
new Number104().maxDepth(treeNode);
}
结果
三、总结
感谢看到最后,非常荣幸能够帮助到你~♥
如果你觉得我写的还不错的话,不妨给我点个赞吧!如有疑问,也可评论区见~