1.层序遍历,
统计每一层节点的和
代码如下:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int deepestLeavesSum(TreeNode* root) {
//层序遍历,队列保存
queue<TreeNode *> q;
if(root==NULL)
return 0;
q.push(root);
int sum=0;
while(!q.empty())
{
sum=0;
int size=q.size();
for(int i=0;i<size;i++)
{
TreeNode *node=q.front();
q.pop();
sum+=node->val;
if(node->left)
q.push(node->left);
if(node->right)
q.push(node->right);
}
}
return sum;
}
};
2.深度优先搜索
从根节点进行搜索,在搜索的同属记录当前节点的深度dep.我们维护两个全局变量maxDep和total,maxDep表示搜索到的节点的最大深度,total表示搜索到的深度等于maxDep的节点的权值之和
对于当前搜索到的节点x,有三种情况:
1)节点x的深度dep小于maxDep,忽略节点x,继续搜索
2)节点x的深度dep等于maxDep,节点x的权值添加到total
3)节点x的深度大于maxDep,maxDep的值更新为dep,且total=x的值
在dfs结束之后,深度最大的叶子节点的权值之后即为total的值
代码如下:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int maxDep=-1;
int total=0;
int deepestLeavesSum(TreeNode* root) {
dfs(root,0);
return total;
}
void dfs(TreeNode *root,int dep)
{
if(root==NULL)
return ;
if(dep>maxDep)
{
maxDep=dep;
total=root->val;
}
else if(dep==maxDep)
{
total+=root->val;
}
dfs(root->left,dep+1);
dfs(root->right,dep+1);
}
};