给你一个二叉树的根节点 root。设根节点位于二叉树的第 1 层,而根节点的子节点位于第 2 层,依此类推。
请你找出层内元素之和 最大 的那几层(可能只有一层)的层号,并返回其中 最小 的那个。
来源:力扣(LeetCode)
思路很简单,就是每层遍历,将每层的节点相加获得最大值,并记录当前层数。
层次遍历借助于队列数据结构。
//按层遍历
public int maxLevelSum(TreeNode root) {
if(root==null){
return 0;
}
int maxLevel=1;
int maxSum=root.val;
LinkedList<TreeNode> queue=new LinkedList<>();
queue.offer(root);
int sum=0;
int cnt=1;
int level=1;
while(!queue.isEmpty()){
TreeNode node=queue.poll();
sum+=node.val;
if(node.left!=null){
queue.offer(node.left);
}
if(node.right!=null){
queue.offer(node.right);
}
cnt--;
if(cnt==0){
if(sum>maxSum){
maxSum=sum;
maxLevel=level;
}
cnt=queue.size();
level++;
sum=0;
}
}
return maxLevel;
}