题目考察的知识点:这道题目考察了二叉树的层序遍历和对节点值的处理。
题目解答方法的文字分析:题目要求找出哪一层的牛的总重量最大。解决方法是利用层序遍历二叉树,对每层的牛的重量进行累加,然后找出累加和最大的那一层。具体步骤如下:
- 创建一个队列用于层序遍历,初始化当前层级为 1,以及累加和的最大值和最大值所在的层级。
- 遍历队列直至为空:获取当前层的节点数量 levelSize 和当前层的累加和 levelSum。遍历当前层的节点:弹出队列中的节点,将其值添加到 levelSum 中。将节点的左右子节点加入队列中。如果当前层的累加和大于最大值,更新最大值和最大值所在的层级。增加当前层级数。
- 返回最大值所在的层级。
本题解析所用的编程语言:本题解析使用了 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; } }