题目考察的知识点:这道题目考察了二叉树的层序遍历和对节点值的处理。

题目解答方法的文字分析:题目要求找出哪一层的牛的总重量最大。解决方法是利用层序遍历二叉树,对每层的牛的重量进行累加,然后找出累加和最大的那一层。具体步骤如下:

  1. 创建一个队列用于层序遍历,初始化当前层级为 1,以及累加和的最大值和最大值所在的层级。
  2. 遍历队列直至为空:获取当前层的节点数量 levelSize 和当前层的累加和 levelSum。遍历当前层的节点:弹出队列中的节点,将其值添加到 levelSum 中。将节点的左右子节点加入队列中。如果当前层的累加和大于最大值,更新最大值和最大值所在的层级。增加当前层级数。
  3. 返回最大值所在的层级。

本题解析所用的编程语言:本题解析使用了 Java 编程语言。

完整且正确的编程代码:

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 *   public TreeNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param root TreeNode类
     * @return int整型
     */
    public int maxLevelSum (TreeNode root) {
        if (root == null) {
            return 0;
        }

        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        int maxLevel = 1;
        int maxSum = root.val;
        int currentLevel = 1;

        while (!queue.isEmpty()) {
            int levelSize = queue.size();
            int levelSum = 0;

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

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

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

            if (levelSum > maxSum) {
                maxSum = levelSum;
                maxLevel = currentLevel;
            }

            currentLevel++;
        }

        return maxLevel;
    }
}