📅  最后修改于: 2023-12-03 15:06:19.979000             🧑  作者: Mango
给定一棵二叉树,找到最大深度处的所有节点的值的和。最大深度是从根节点到任意叶子节点的最长路径。
下面是一个示例二叉树:
1
/ \
2 3
/ \ \
4 5 6
/ \
7 8
最大深度处的节点是 5 和 6,它们的和是 11。
我们可以通过深度优先搜索来解决这个问题。具体地,我们从根节点开始进行深度优先搜索,记录每个节点所在的深度层次,同时记录最大深度 maxDepth,当遍历到第 maxDepth 层时,将此节点的值加入结果中。
class Solution:
def deepestLeavesSum(self, root: Optional[TreeNode]) -> int:
if not root:
return 0
deep_sum = 0
max_depth = 0
def dfs(node, depth):
nonlocal deep_sum, max_depth
if not node:
return
if not node.left and not node.right:
if depth > max_depth:
max_depth = depth
deep_sum = node.val
elif depth == max_depth:
deep_sum += node.val
dfs(node.left, depth + 1)
dfs(node.right, depth + 1)
dfs(root, 0)
return deep_sum
该解法使用了深度优先搜索(DFS)来遍历二叉树。在 DFS 的过程中,我们需要记录当前遍历到的节点深度 depth,以及最大深度 maxDepth 和最大深度处的节点的和 deepSum。在每次访问到叶子节点时,根据深度是否等于最大深度,更新 MaxDepth 和 DeepSum。