只需要找出最深的节点是什么,然后累加结果就行
dfs
// 最大深度
int depth = -1;
// 总和
int sum = 0;
public int deepestLeavesSum(TreeNode root) {
dfs(root, 0);
return sum;
}
/**
* 深度优先遍历,维护一个最大深度和对应的结果值
* 有三种情况: 1,当前 遍历的深度大于记录的最大深度,那么更新记录的最大深度,结果重置
* 2.当前深度等于记录的最大深度,累计结果
* 3.当前深度小于记录的最大深度,跳过
* @param node
* @param level
*/
private void dfs (TreeNode node, int level){
if (node == null){
return;
}
if (level > depth){
sum = node.val;
depth = level;
} else if (level == depth){
sum += node.val;
}
dfs(node.left, level + 1);
dfs(node.right, level + 1);
}
bfs
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int deepestLeavesSum(TreeNode root) {
if (root == null){
return 0;
}
int sum = 0;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()){
int count = 0;
int size = queue.size();
for (int i = 0; i < size; i++){
TreeNode node = queue.poll();
count += node.val;
if (node.left != null){
queue.offer(node.left);
}
if (node.right != null){
queue.offer(node.right);
}
}
sum = count;
}
return sum;
}
}
完整代码
package com.算法专练.力扣.层数最深叶子节点的和;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.LinkedList;
import java.util.Queue;
/**
* @author xnl
* @Description:
* @date: 2022/8/17 23:00
*/
public class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
}
// 最大深度
int depth = -1;
// 总和
int sum = 0;
public int deepestLeavesSum(TreeNode root) {
dfs(root, 0);
return sum;
}
/**
* 深度优先遍历,维护一个最大深度和对应的结果值
* 有三种情况: 1,当前 遍历的深度大于记录的最大深度,那么更新记录的最大深度,结果重置
* 2.当前深度等于记录的最大深度,累计结果
* 3.当前深度小于记录的最大深度,跳过
* @param node
* @param level
*/
private void dfs (TreeNode node, int level){
if (node == null){
return;
}
if (level > depth){
sum = node.val;
depth = level;
} else if (level == depth){
sum += node.val;
}
dfs(node.left, level + 1);
dfs(node.right, level + 1);
}
/**
* bsf
* 深度优先遍历
* @param root
* @return
*/
public int bfs(TreeNode root) {
if (root == null){
return 0;
}
int sum = 0;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()){
int count = 0;
int size = queue.size();
for (int i = 0; i < size; i++){
TreeNode node = queue.poll();
count += node.val;
if (node.left != null){
queue.offer(node.left);
}
if (node.right != null){
queue.offer(node.right);
}
}
sum = count;
}
return sum;
}
}
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode() {}
TreeNode(int val) { this.val = val; }
TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}