给你一个二叉树的根节点 root ,树中每个节点都存放有一个 0 到 9 之间的数字。
每条从根节点到叶节点的路径都代表一个数字:
例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。
计算从根节点到叶节点生成的 所有数字之和 。
叶节点 是指没有子节点的节点。
示例 1:
输入:root = [1,2,3]
输出:25
解释:
从根到叶子节点路径
1->2
代表数字
12从根到叶子节点路径
1->3
代表数字
13因此,数字总和 = 12 + 13 =
25示例 2:
输入:root = [4,9,0,5,1]
输出:1026
解释:
从根到叶子节点路径
4->9->5
代表数字 495
从根到叶子节点路径
4->9->1
代表数字 491
从根到叶子节点路径
4->0
代表数字 40
因此,数字总和 = 495 + 491 + 40 =
1026提示:
树中节点的数目在范围 [1, 1000] 内
0 <= Node.val <= 9
树的深度不超过 10
#include <bits/stdc++.h>
using namespace std;
struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution
{
public:
int sumNumbers(TreeNode *root)
{
if (root == nullptr)
return 0;
int result = 0;
vector<int> num;
vector<int> temp;
digui(root, &num, &temp);
for (int i = 0; i < num.size(); i++)
{
result = result + num[i];
}
return result;
}
void digui(TreeNode *root, vector<int> *num, vector<int> *temp)
{
temp->push_back(root->val);
if (root->left == nullptr && root->right == nullptr)
{
int sum = 0;
for (int i = temp->size() - 1; i >= 0; i--)
{
/*if (i==0 && (*temp)[0]==0) {
continue;
}*/
int howi = (*temp)[i];
sum = sum + howi * pow(10, (temp->size() - i - 1));
}
num->push_back(sum);
temp->pop_back();
return;
}
if (root->left)
digui(root->left, num, temp);
if (root->right)
digui(root->right, num, temp);
temp->pop_back();
}
};