leetcode1161最大层内元素之和

  • dfs
    lass Solution {
    public:
        unordered_map<int,vector<int>>m;
        void dfs(TreeNode* root,int depth){
            if(!root)return;
            int res=0;
            depth++;
            dfs(root->left,depth);
            dfs(root->right,depth);
            res+=root->val;
            m[depth].push_back(res);
        }
        int maxLevelSum(TreeNode* root) {
          dfs(root,0);
          int depth=0;
          int ans=1<<31;
          for(const auto&v :m){
              int size=v.second.size();
              int res=0;
              for(int i=0;i<size;i++){
                  res+=v.second[i];
              }
              if(res>ans){
                  ans=res;
                  depth=v.first;
              }
          }
          return depth;
        }
    };

    表示最小或最大值方法(以int四字节为例)

  • MaxInt=(1<<31)-1;
  • MinInt=1<<31;

queue入队时使用push();vector是使用push_back()

每层递归记录层号,要是第一次访问这个层就将数据放进每层的元素和中,不是第一次就加上这个元素得到新的层元素和。

vector<int>Sum;
void dfs(TreeNode* root,int depth){
    if(!root)return;
    if(depth==Sum.size()){
        Sum.push_back(root->val);
    }else{
        Sum[depth]+=root->val;
    }
    dfs(root->left,depth+1);
    dfs(root->right,depth+1);
}
int maxLevelSum(TreeNode* root){
    dfs(root,0);
    int ans=1<<31;
    int depth=0;
    for(int i=0;i<Sum.size();i++){
        if(Sum[i]>ans){
            ans=Sum[i];
            depth=i+1;
        }
    }
    return depth;
}

 

posted @   iu本u  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示