
本题使用递归,由于题目规定计算方式,也就是当前节点与孩子节点组成一个数,计算方式就是前层的累加值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);
}
};
本文介绍了一种使用递归算法解决特定二叉树路径数值之和问题的方法。通过递归地遍历二叉树的左右子节点,并将当前节点值与父节点累积值按特定规则相加,最终计算出所有从根节点到叶子节点路径的数值之和。
116

被折叠的 条评论
为什么被折叠?



