/**

  • Definition for a binary tree node.

  • struct TreeNode {

  • int val;
  • TreeNode *left;
  • TreeNode *right;
  • TreeNode() : val(0), left(nullptr), right(nullptr) {}
  • TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
  • TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
  • };
    /
    class Solution {
    unordered_map<TreeNode
    , int> depth;
    int max_d = 0;

    void dfs(TreeNode* root, int d=1){
    if(!root) return;
    depth[root] = d;
    max_d = max(max_d, d);
    dfs(root->left, d+1);
    dfs(root->right, d+1);
    }
    public:
    int deepestLeavesSum(TreeNode* root) {
    dfs(root);
    int ans = 0;
    for(auto d:depth){
    // cout<<d.first<<" "<<d.second<<endl;
    if(d.second == max_d){
    // cout<<d.first->val<<" ";
    ans += d.first->val;
    }
    }
    return ans;
    }
    };

Comments (0)