给你一棵二叉树,请你返回层数最深的叶子节点的和。
leetcode官方题解
我们从根节点开始进行搜索,在搜索的同时记录当前节点的深度 dep。我们维护两个全局变量 maxdep 和 total,其中 maxdep 表示搜索到的节点的最大深度,total 表示搜索到的深度等于 maxdep 的节点的权值之和。
- 节点 x 的深度 dep 小于 maxdep,那么我们可以忽略节点 x,继续进行搜索;
- 节点 x 的深度 dep 等于 maxdep,那么我们将节点 x 的权值添加到 total 中;
- 节点 x 的深度 dep 大于 maxdep,此时我们找到了一个深度更大的节点,因此需要将 maxdep 置为 dep,并将 total 置为节点 x 的权值。
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/deepest-leaves-sum/solution/ceng-shu-zui-shen-xie-zi-jie-dian-de-he-by-leetc-2/
代码
class Solution {
int maxtip=-1;
int total=0;
public:
void dfs(TreeNode*root,int t){
if(!root) return ;
if(t>maxtip){
maxtip=t;
total=root->val;
}
else if(t==maxtip){
total+=root->val;
}
dfs(root->left,t+1);
dfs(root->right,t+1);
}
int deepestLeavesSum(TreeNode* root) {
dfs(root,0);
return total;
}
};