题目
题目来源:力扣(LeetCode)
给你一棵二叉树的根节点 root ,请你返回层数最深的叶子节点的和 。
 
示例 1:

输入:root = [1,2,3,4,5,null,6,7,null,null,null,null,8]
输出:15
示例 2:
输入:root = [6,7,8,2,7,1,3,9,null,1,4,null,null,null,5]
输出:19
解法一:深度优先搜索
我们从根节点开始进行搜索,在搜索的同时记录当前节点的深度 depth 。定义两个全局变量 maxDepth 和 sum , 其中 maxDepth 表示搜索到的节点的最大深度,sum 表示搜索到的最大深度的节点的权值之和。
当我们搜索到一个新的节点 x 时,会有以下三种情况:
- 节点 x 的深度 depth 小于 最大深度 maxDepth,那么我们可以忽略节点 x ,继续进行搜索;
 - 节点 x 的深度 depth 等于 最大深度 maxDepth,那么我们将节点 x 的权值添加到 sum 中;
 - 节点 x 的深度 depth 大于 最大深度 maxDepth,此时我们找到了一个深度更大的节点,因此需要将 maxDepth 置为当前找到的深度 depth ,并将 sum 的值置为节点 x 的权值。
 
在深度优先搜索结束之后,深度最大的叶子节点的权值之和就存储在 sum 中。
/*** @param {TreeNode} root* @return {number}*/var deepestLeavesSum = function (root) {let sum = [0], maxDepth = [-1];dfs(root, sum, 0, maxDepth);return sum[0];};const dfs = (root, sum, depth, maxDepth) => {if (root == null) {return;}if (depth > maxDepth[0]) {// 当前节点的深度 depth 大于 maxDepth,将 maxDepth 置为 depth,并将 sum 的值置为当前节点的权值maxDepth[0] = depth;sum[0] = root.val;} else if (maxDepth[0] == depth) {// 当前节点的深度等于 maxDepth,将节点的权值添加到 sum 中sum[0] += root.val;}// 搜索左子树dfs(root.left, sum, depth + 1, maxDepth);// 搜索右子树dfs(root.right, sum, depth + 1, maxDepth);}
