题意较为清晰易懂,即遍历二叉树中所有从根到叶子的结点的值并求和。
可以使用DFS来实现算法。
但是难点在于如何保存中间结果。
参考网上的结论,可以在遍历过程中改变结点的val数值,该数值即为从根节点到当前节点的数,因此每到一个叶子节累加该叶子节点的val值,最后的累加结果即为所求。
代码
class Solution
{
public:
int sumNumbers(TreeNode *root)
{
sumAll = 0;
dfsSum(root);
return sumAll;
}
void dfsSum(TreeNode *root)
{
TreeNode *p;
if(p==NULL)
return ;
if(p->left==NULL&&p->right==NULL)
{
sumAll += p->val;
return;
}
if(p->left!=NULL)
{
p->left->val += p->val*10;
dfsSum(p->left);
}
if(p->right!=NULL)
{
p->right->val += p->val*10;
dfsSum(p->right);
}
}
private:
int sumAll;
};