最大层内元素和----leetcode周赛150_1002

题目描述:

给你一个二叉树的根节点 root。设根节点位于二叉树的第 1 层,而根节点的子节点位于第 2 层,依此类推。
请你找出层内元素之和 最大 的那几层(可能只有一层)的层号,并返回其中 最小 的那个。

示例 :

输入:[1,7,0,7,-8,null,null]
输出:2
解释:
第 1 层各元素之和为 1,
第 2 层各元素之和为 7 + 0 = 7,
第 3 层各元素之和为 7 + -8 = -1,
所以我们返回第 2 层的层号,它的层内元素之和最大。

提示

  1. 树中的节点数介于 1 和 10^4 之间
  2. -10^5 <= node.val <= 10^5

思路:

  • 利用队列,对二叉树进行层序遍历,记录每层节点和,逐步更新ans为最大和所在层数
  • 可以利用变量,记录下一层节点的个数,每次利用for循环访问一层的节点,即可达到统计的目的

具体代码如下 :

class Solution {
public:
    int ans =  0;int anshe = -2147483648;//ans层数与ans层和
    int cenghe; int curceng;
    queue<TreeNode*> que;
    int maxLevelSum(TreeNode* root) {
        if(!root)return 0;
        int len =1;int next = 0;curceng = 0;//当前层个数,下一层节点个数,当前在第几层。
        que.push(root);
        while(que.size()){
            cenghe = 0;//当前层的和
            curceng ++;//当前在第几层
            next = 0;//下一层个数
            for(int i  = 0 ; i < len;i++){
                TreeNode* t = que.front();que.pop();
                cenghe += t->val;
                if(t->left){que.push(t->left);next++;}
                if(t->right){que.push(t->right);next++;}
            }
            len = next;
            if(cenghe > anshe){
                ans = curceng;
                anshe = cenghe;
            }
        }
        return ans;
    }
};
posted @ 2019-08-18 16:11  我不是张小毛  阅读(247)  评论(0编辑  收藏  举报