Daily LeetCode – day0002 1161. Maximum Level Sum of a Binary Tree

// 1161. Maximum Level Sum of a Binary Tree
class Solution {
    public int maxLevelSum(TreeNode root) {
        if (root == null) {
            return 0;
        }
        Queue<TreeNode> q = new LinkedList<>();
        q.offer(root);
        int level = 1;
        int ans = 0;
        int levelSum;
        int maxLevelSum = Integer.MIN_VALUE;
        int levelSize;
        while (!q.isEmpty()) {
            levelSum = 0;
            levelSize = q.size();
            for (int i = 0; i < levelSize; ++i) {
                TreeNode peek = q.poll();
                levelSum += peek.val;
                if (peek.left != null) {
                    q.offer(peek.left);
                }
                if (peek.right != null) {
                    q.offer(peek.right);
                }
            }
            if (levelSum > maxLevelSum) {
                maxLevelSum = levelSum;
                ans = level;
            }
            ++level;
        }
        return ans;
    }
}
学习笔记:
这是一道二叉树相关的题目,使用深度优先搜索和宽度优先搜索都可以做。
不过既然是统计每一层内的总值找出最大的层号,用宽度优先搜索来做会更加自然一些。宽度优先搜索会使用到队列,Java中的队列的函数有6个,功能是加入队尾、看一眼队首、移除队首3种,但在遇到队列空了或者满了的特殊情况的应对不同。
抛出异常返回特殊值
加入队尾add()offer()
看一眼队首element()peek()
移除队首remove()poll()


关于樊轶群

一个善良的理想主义者。
此条目发表在每日LeetCode分类目录。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注