地址:https://leetcode-cn.com/problems/deepest-leaves-sum/
方法一:深度优先遍历
Java 代码:
import java.util.TreeMap;
public class Solution {
private TreeMap<Integer, Integer> treeMap;
public int deepestLeavesSum(TreeNode root) {
treeMap = new TreeMap<>();
dfs(root, 1);
return treeMap.get(treeMap.lastKey());
}
private void dfs(TreeNode node, int depth) {
if (node == null) {
return;
}
if (node.left == null && node.right == null) {
treeMap.put(depth, node.val += treeMap.getOrDefault(depth, 0));
return;
}
dfs(node.left, depth + 1);
dfs(node.right, depth + 1);
}
}
方法二:广度优先遍历
Java 代码:
import java.util.LinkedList;
import java.util.Queue;
import java.util.TreeMap;
public class Solution {
public int deepestLeavesSum(TreeNode root) {
TreeMap<Integer, Integer> treeMap = new TreeMap<>();
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
int depth = 1;
while (!queue.isEmpty()) {
int curSize = queue.size();
for (int i = 0; i < curSize; i++) {
TreeNode top = queue.poll();
if (top.left == null && top.right == null) {
treeMap.put(depth, top.val += treeMap.getOrDefault(depth, 0));
}
if (top.left != null) {
queue.offer(top.left);
}
if (top.right != null) {
queue.offer(top.right);
}
}
depth += 1;
}
return treeMap.get(treeMap.lastKey());
}
}