1302. 层数最深叶子节点的和

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/deepest-leaves-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
两种思路:
1,DFS ;找到叶子节点,记录最大深度和叶子值的和。如果再找叶子的过程中,有更深的,就重置数据。相同的就累加。不够深度的就不用管。
2,BFS ;就是层序遍历,遍历到最后就是最深叶子节点的和。
int deep = -1;
int ans = 0;
public int deepestLeavesSum(TreeNode root) {
dfs(root,0);
return ans;
// return bfs(root);
}
public void dfs(TreeNode root, int level) {
if(root == null) {
return;
}
dfs(root.left,level+1);
dfs(root.right,level+1);
// dfs都已经返回,说明现在的node已经是叶子节点
// 判断层数是否是最大的,是:和增加,超过最大的深度:更新深度值,重新赋值和。否则就什么也不做
if(level > deep) {
deep = level;
ans = root.val;
} else if(level == deep) {
ans += root.val;
}
}
/**
有两种方法,dfs,bfs
bfs:将每一层的节点入队列,最后一次的和是结果
*/
public int bfs(TreeNode root) {
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
int sum = 0;
while(!queue.isEmpty()) {
int size = queue.size();
sum = 0;
for(int i=0;i<size;i++) {
TreeNode cur = queue.poll();
sum+=cur.val;
if(cur.left != null) {
queue.add(cur.left);
}
if(cur.right != null) {
queue.add(cur.right);
}
}
}
return sum;
}
浙公网安备 33010602011771号