题目地址:
https://leetcode.com/problems/deepest-leaves-sum/
给定一棵二叉树,返回其最深的叶子的数字和。
思路是DFS,开一个变量记录当前遇到的最深深度,如果到了最深深度则累加权值,如果超过最深深度则更新最深深度。代码如下:
class Solution {
public:
int deepestLeavesSum(TreeNode* root) {
int max_dep = -1, res = 0;
dfs(root, 0, max_dep, res);
return res;
}
void dfs(TreeNode* p, int dep, int& max_dep, int& res) {
if (!p) return;
if (!p->left && !p->right) {
if (dep > max_dep) {
res = p->val;
max_dep = dep;
} else if (dep == max_dep)
res += p->val;
}
dfs(p->left, dep + 1, max_dep, res);
dfs(p->right, dep + 1, max_dep, res);
}
};
时间复杂度 O ( n ) O(n) O(n),空间 O ( h ) O(h) O(h)。