目录

题目描述

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

image-20230716221955147

题意分析

求最深一层所有节点值之和。最深层节点必然都是叶子,不需要另查叶子条件。

解法:层序遍历按层覆盖答案

核心思路

[!blue]

BFS 按层处理,每层开始清零本层和,固定当前层数量后累加。队列在本层处理期间加入的孩子属于下一层,不参与当前和。

每次覆盖前一层结果,遍历结束时留下的就是最深层之和。

解题步骤

  • 根非空时入队。
  • 每轮固定队列当前大小并将层和清零。
  • 处理固定数量节点,加入非空孩子。
  • 队列空后返回最后层和。

根一,下一层二、三,最深层四、五、六,各层和一、五、十五,最终返回十五。 根一的左孩子二是叶子,右孩子三下有叶子四时,最深层只包含四,结果四,不能再把浅层叶子二加上。

代码实现

class Solution {

    public int deepestLeavesSum(TreeNode root) {
        if (root == null) {
            return 0;
        }

        Queue<TreeNode> queue = new ArrayDeque<>();

        queue.offer(root);
        int levelSum = 0;

        while (!queue.isEmpty()) {
            // 固定本层节点数,后续入队的孩子留到下一层。
            int size = queue.size();

            // 丢弃上一层的和,最终只保留最深层结果。
            levelSum = 0;

            for (int i = 0; i < size; i++) {
                TreeNode node = queue.poll();

                levelSum += node.val;

                if (node.left != null) {
                    queue.offer(node.left);
                }

                if (node.right != null) {
                    queue.offer(node.right);
                }
            }
        }

        return levelSum;
    }
}
func deepestLeavesSum(root *TreeNode) int {

    if root == nil {
        return 0
    }

    queue := []*TreeNode{root}
    levelSum := 0

    for len(queue) > 0 {
        // 丢弃上一层的和,最终只保留最深层结果。
        levelSum = 0
        // 固定本层节点数,后续入队的孩子留到下一层。
        size := len(queue)
        for i := 0; i < size; i++ {
            node := queue[0]
            queue = queue[1:]
            levelSum += node.Val

            if node.Left != nil {
                queue = append(queue, node.Left)
            }
            if node.Right != nil {
                queue = append(queue, node.Right)
            }
        }
    }

    return levelSum
}

复杂度分析

  • 时间复杂度:$O(n)$。
  • 空间复杂度:$O(w)$,w 为最大层宽,最坏 $O(n)$。

关键点总结

[!green]

  • 只保存最后一层的和,无需保存所有层结果。
  • 链状树每层仅一个节点,队列也很小。

易错点总结

[!yellow]

  • 层和只在循环外清零,会累加整棵树。
  • 内层一直处理到队列空,会把后续层混进当前层。
  • 把空孩子入队,会使后续取值失败。

相似题目

题目 难度 关联与区别
1161. 最大层内元素和 中等 同样逐层求和,原题选择和最大的一层,本题只保留最后一层的和。
转载与许可
作者
链接 https://hgnulb.github.io/blog/2022/51696219
许可 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!