leetcode1161最大层内元素之和

发布时间 2023-09-05 15:11:11作者: iu本u
  • 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;
}