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语言实现了求二叉树每层节点值之和的最大层级的功能。
代码考察的知识点有二叉树、最大层级。
主要逻辑如下:
- 定义了一个
TreeNode类作为二叉树的节点类,包含节点值val、左子节点left和右子节点right。 - 创建了一个
Solution类,包含了一个maxLevelSum方法,接收一个二叉树的根节点作为参数,返回一个整型值。 - 使用队列
q来进行层序遍历。初始化最大和max为0,当前层级i为1,最大和对应的层级maxi为0。 - 如果根节点为空,直接返回1。
- 将根节点加入队列中。
- 循环遍历队列,直到队列为空:初始化当前层级的节点和sum为0。获取当前层级的节点个数count。遍历当前层级的节点:将队头节点的值加到sum中。如果当前节点的左子节点不为空,将左子节点加入队列。如果当前节点的右子节点不为空,将右子节点加入队列。弹出队头节点。如果当前层级的节点和sum大于等于之前记录的最大和max,更新max为sum,更新最大和对应的层级maxi为当前层级i。层数加一。
- 返回最大和对应的层级
maxi。
该段代码实现了使用队列进行层序遍历,并计算二叉树每层节点值之和的最大层级。最后返回最大和对应的层级。

京公网安备 11010502036488号