typedef struct TreeNode TreeNode;
int maxDepth(TreeNode* root) {
if (!root) return 0;
return 1 + fmax(maxDepth(root->left), maxDepth(root->right));
}
void dfs(TreeNode* root, int curDepth, int maxDepth, int* ans) {
if (!root) return;
if (curDepth == maxDepth)
*ans += root->val;
dfs(root->left, curDepth + 1, maxDepth, ans);
dfs(root->right, curDepth + 1, maxDepth, ans);
}
int deepestLeavesSum(TreeNode* root) {
int ans = 0;
dfs(root, 1, maxDepth(root), &ans);
return ans;
}