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) {
        // write code here
        Queue<TreeNode> q = new LinkedList<>();
        int max = 0, i = 1, maxi = 0;

        if (root == null) {
            return 1;
        }

        q.add(root);

        while (!q.isEmpty()) {
            int sum = 0;
            int count = q.size();

            while (count-- > 0) {
                TreeNode tmp = q.peek();
                sum += tmp.val;

                if (tmp.left != null) {
                    q.add(tmp.left);
                }
                if (tmp.right != null) {
                    q.add(tmp.right);
                }
                q.poll();
            }

            if (max <= sum) {
                max = sum;
                maxi = i;
            }
            i++;
        }

        return maxi;
    }
}

代码使用Java语言实现了求二叉树每层节点值之和的最大层级的功能。

代码考察的知识点有二叉树、最大层级。

主要逻辑如下:

  1. 定义了一个TreeNode类作为二叉树的节点类,包含节点值val、左子节点left和右子节点right
  2. 创建了一个Solution类,包含了一个maxLevelSum方法,接收一个二叉树的根节点作为参数,返回一个整型值。
  3. 使用队列q来进行层序遍历。初始化最大和max为0,当前层级i为1,最大和对应的层级maxi为0。
  4. 如果根节点为空,直接返回1。
  5. 将根节点加入队列中。
  6. 循环遍历队列,直到队列为空:初始化当前层级的节点和sum为0。获取当前层级的节点个数count。遍历当前层级的节点:将队头节点的值加到sum中。如果当前节点的左子节点不为空,将左子节点加入队列。如果当前节点的右子节点不为空,将右子节点加入队列。弹出队头节点。如果当前层级的节点和sum大于等于之前记录的最大和max,更新max为sum,更新最大和对应的层级maxi为当前层级i。层数加一。
  7. 返回最大和对应的层级maxi

该段代码实现了使用队列进行层序遍历,并计算二叉树每层节点值之和的最大层级。最后返回最大和对应的层级。