题目描述:给定一个仅包含数字0−9 的二叉树,每一条从根节点到叶子节点的路径都可以用一个数字表示。例如根节点到叶子节点的一条路径是1→2→3,那么这条路径就用123 来代替。
找出根节点到叶子节点的所有路径表示的数字之和
示例:
这颗二叉树一共有两条路径,根节点到叶子节点的路径 1→2 用数字12 代替,根节点到叶子节点的路径1→3 用数字13 代替,所以答案为12+13=25。
解题思路:利用先序遍历二叉树,记录下每一层的路径值,每遍历一个节点,都要重新计算当前结点的值,在叶子节点时则将值保存返回。.
int sumNumbers(TreeNode* root) {
// write code here
int sum = 0,sum1 =0;
pre(root, sum,sum1);
return sum1;
}
void pre(TreeNode* root,int &sum,int &sum1)
{
if(root == nullptr)
{
return ;
}
sum = sum*10 + root->val;
if(root->left==nullptr&&root->right==nullptr)
sum1 = sum1 + sum;
pre(root->left,sum,sum1);
pre(root->right,sum,sum1);
sum = (sum - root->val)/10;
}