给你一个二叉树的根节点 root
,树中每个节点都存放有一个 0
到 9
之间的数字。
每条从根节点到叶节点的路径都代表一个数字:
- 例如,从根节点到叶节点的路径
1 -> 2 -> 3
表示数字123
。
计算从根节点到叶节点生成的 所有数字之和 。
叶节点 是指没有子节点的节点。
示例 1:
输入:root = [1,2,3] 输出:25 解释: 从根到叶子节点路径1->2
代表数字12
从根到叶子节点路径1->3
代表数字13
因此,数字总和 = 12 + 13 =25
思路:前序遍历的方式找到所有的数字,相加返回。
缺陷:当二叉树高度很高时,不能直接用int类型,需用数组存储每一个位置。再模拟加法运算得到最终结果。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int res=0;
void backtracing(TreeNode *root,int sum)
{
sum=sum*10+root->val;
if(root->left==nullptr&&root->right==nullptr)
{
res+=sum;
return ;
}
if(root->left)backtracing(root->left,sum);
if(root->right)backtracing(root->right,sum);
}
int sumNumbers(TreeNode* root) {
backtracing(root,0);
return res;
}
};