题解 | #重量级的一层# 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作为结果,即节点值和最大的那一层的层数。

代码通过两个队列的交替使用,实现了按层遍历二叉树并找到节点值和最大的那一层的要求。

全部评论

相关推荐

阿里巴巴各部门年终奖开奖了,有人拿到了220w
真烦好烦真烦:拿命换钱呢,公司给你220万,肯定是因为你对公司的贡献大于220万,想想要多厉害多累才能达到
投递阿里巴巴集团等公司10个岗位 >
点赞 评论 收藏
分享
03-27 17:33
门头沟学院 Java
代码飞升:同学院本,你要注意hr当天有没有回复过,早上投,还要打招呼要推销自己,不要一个劲投
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务