本题使用递归,由于题目规定计算方式,也就是当前节点与孩子节点组成一个数,计算方式就是前层的累加值sum*10+当前节点值。对于根节点就是初始值sum*10+根节点值,sum设为0。
注:如果是求所有路径节点值的和,就是不是题目中要求的这种计算方式,只需要将累加代码改为只累加上层结果和当前节点的值
注:若是节点的值不是个位数,我们在累加的时候就不能直接sum*10累加,而是应该判断当前节点的数字的位数n,然后累加时,上层值sum应该 * 再累加当前节点的值。
代码如下:
class Solution {
public:
/**
*
* @param root TreeNode类
* @return int整型
*/
int sumNumbers(TreeNode* root) {
// write code here
int sum=0;
if(root==nullptr) return sum;
return number(root,sum);
}
int number(TreeNode* root,int sum)
{
if(root==nullptr)
return 0;
sum=sum*10+root->val;
if(root->left==nullptr&&root->right==nullptr)
return sum;
return number(root->left,sum)+number(root->right,sum);
}
};