LeetCode-1302 层数最深叶子节点的和
LeetCode-1302 层数最深叶子节点的和
题目描述
给你一棵二叉树的根节点 root
,请你返回 层数最深的叶子节点的和
示例 1:
1 | 输入:root = [1,2,3,4,5,null,6,7,null,null,null,null,8] |
示例 2:
1 | 输入:root = [6,7,8,2,7,1,3,9,null,1,4,null,null,null,5] |
提示:
- 树中节点数目在范围 $[1, 10 ^ 4]$ 之间。
- $1 \leq Node.val \leq 100$
深度优先搜索 DFS
- $O(N)$
DFS
只需要遍历一遍树,找到所有叶子节点,此时判断:
- 当前叶子节点深度 小于 当前最深深度,则跳过
- 当前叶子节点深度 等于 当前最深深度,则 最深深度节点权值和加上当前节点权值
- 当前叶子节点深度 大于 当前最深深度,则 更新最深深度,以及更新最深深度节点权值和为当前节点的权值
由于 非叶子节点深度一定低于叶子节点,因此对于所有节点都可以进行上述判断,代码可以写的更短一些
题目中第一个实例的更新过程如下图所示:
- 当前节点深度 小于 当前最深深度。
- 如图中的
d: 2 < 3
表示当前节点深度为d = 2
,枚举当前节点之前最深深度为3
- 那么
d: 2 < 3
跳过
- 如图中的
- 当前节点深度 等于 当前最深深度。
- 如图中的
d: 0 = 0
表示当前节点深度为d = 0
,枚举当前节点之前最深深度为0
- 两者相等:因此要将当前节点权值 加入 最大深度节点权值和中
- 如图中的
- 当前节点深度 大于 当前最深深度。如图中
- 如图中的
d: 1 > 0
表示当前节点深度为d = 1
,枚举当前节点之前最深深度为0
- 由于大于最深深度,因此要更新最深深度,以及 重新计算权值和(初始化为当前节点的权值)
- 如图中的
- 按照前序遍历枚举树中的每个节点
时间复杂度 - $O(N)$
- 枚举一遍树中的所有节点,树节点数量为 $N$,因此复杂度为 $O(N)$
代码
1 | /** |
1 | /** |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Cat's Blog!
评论