Java实现 LeetCode 1161.最大层内元素和(BFS)

给你一个二叉树的根节点 root。设根节点位于二叉树的第 1 层,而根节点的子节点位于第 2 层,依此类推。

请你找出层内元素之和 最大 的那几层(可能只有一层)的层号,并返回其中 最小 的那个。

示例:
Java实现 LeetCode 1161.最大层内元素和(BFS)_第1张图片

输入:[1,7,0,7,-8,null,null]
输出:2
解释:
第 1 层各元素之和为 1,
第 2 层各元素之和为 7 + 0 = 7,
第 3 层各元素之和为 7 + -8 = -1,
所以我们返回第 2 层的层号,它的层内元素之和最大。

提示:

树中的节点数介于 1 和 10^4 之间
-10^5 <= node.val <= 10^5
通过次数5,495提交次数8,041

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-level-sum-of-a-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public int maxLevelSum(TreeNode root) {
        if(root == null) return 0;
        Queue queue = new LinkedList<>();
        int step = 0;
        int ans = 0;
        int max = 0;
        queue.add(root);
        while (!queue.isEmpty()) {
            step++;
            int size = queue.size();
            int sum = 0;
            for(int i = 0; i < size; i++) {
                TreeNode poll = queue.poll();
                sum += poll.val;
                if (poll.left != null) {
                    queue.add(poll.left);
                }
                if (poll.right != null) {
                    queue.add(poll.right);
                }
            }
            if(sum > max) {
                max = sum;
                ans = step;
            }
        }
        return ans;
    }
}

你可能感兴趣的:(leetcode,搜索算法,Java)