• 最大层内元素和----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;
        }
    };
    
  • 相关阅读:
    开源.net 混淆器ConfuserEx介绍
    k8s删除namespace失败,状态Terminating解决方案
    java get all threadlocal from thread
    mysql查看索引的大小
    InnoDB一定会在索引中加上主键吗?
    全链路追踪traceId,ThreadLocal与ExecutorService
    redis 批量删除keys
    shell逐行读取excel并执行sql
    Is it possible to create @Around Aspect for feign.Client
    Spring Boot后台启动不打印nohup.out
  • 原文地址:https://www.cnblogs.com/zhangxiaomao/p/11372753.html
Copyright © 2020-2023  润新知