题解 | #重量级的一层# java
重量级的一层
https://www.nowcoder.com/practice/193372871b09426ab9ea805f0fd44d5c
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 List<TreeNode> v1 = new ArrayList<>(); List<TreeNode> v2 = new ArrayList<>(); v1.add(root); int MAXweight = 0, MAXindex = 0, index = 1; while (v1.size() > 0) { int weight = 0; for (TreeNode tr : v1) { if (tr.left != null) v2.add(tr.left); if (tr.right != null) v2.add(tr.right); weight += tr.val; } if (weight >= MAXweight) { MAXweight = weight; MAXindex = index; } index++; v1 = new ArrayList<>(v2); v2.clear(); } return MAXindex; } }
代码使用的编程语言是Java。
这道题目考察的是二叉树的层序遍历,并找出节点值和最大的那一层的层数。
解决这个问题的思路是使用两个队列v1和v2来分别保存当前层和下一层的节点。首先将根节点入队v1,并进入循环,直到v1队列为空为止。
在每一次循环中,首先计算当前层的节点值之和weight,并用一个for循环遍历v1队列中的所有节点。对于每个节点,如果它有左孩子,则将左孩子入队v2;如果节点有右孩子,则将右孩子入队v2。将节点值加入到weight中。
同时,每次循环都将weight与当前记录的最大权重MAXweight进行比较,如果weight更大,则更新MAXweight和MAXindex,分别记录最大权重和对应的层数。
然后将v2队列赋值给v1队列,并清空v2队列,准备处理下一层。
最后,返回MAXindex作为结果,即节点值和最大的那一层的层数。
代码通过两个队列的交替使用,实现了按层遍历二叉树并找到节点值和最大的那一层的要求。