给你一棵二叉树,请你返回层数最深的叶子节点的和。
示例:
输入:root = [1,2,3,4,5,null,6,7,null,null,null,null,8]
输出:15
深度优先搜索
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
int maxDep = 0;
int sum = 0;
public int deepestLeavesSum(TreeNode root) {
dfs(root, 0);
return sum;
}
public void dfs(TreeNode node, int dep) {
if (node == null) {
return;
}
if (dep > maxDep) {
maxDep = dep;
sum = node.val;
} else if (dep == maxDep) {
sum += node.val;
}
dfs(node.left, dep + 1);
dfs(node.right, dep + 1);
}
}
广度优先搜索(层序遍历)
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int deepestLeavesSum(TreeNode root) {
int res = 0;
int size = 0;
LinkedList<TreeNode> list = new LinkedList<>();
list.add(root);
while (!list.isEmpty()) {
size = list.size();
res = 0;
while ((--size) >= 0) {
TreeNode node = list.poll();
res += node.val;
if (node.left != null) {
list.add(node.left);
}
if (node.right != null) {
list.add(node.right);
}
}
}
return res;
}
}