class Solution {
public:
int ans = 0;
void dfs(vector<int>& s, TreeNode* node) {
if (node == NULL) return;
s.emplace_back(node->val);
if (node->left == NULL && node->right == NULL) {
int cnt = 0;
for (auto x : s) {
cnt = cnt * 10 + x;
}
ans += cnt;
}
else {
dfs(s, node->left);
dfs(s, node->right);
}
s.pop_back();
}
int sumNumbers(TreeNode* root) {
vector<int>s;
dfs(s, root);
return ans;
}
};
class Solution {
public:
int dfs(TreeNode* node, int sum) {
if (node == NULL) return 0;
sum = sum * 10 + node->val;
if (node->left == NULL && node->right == NULL) return sum;
else return dfs(node->left, sum) + dfs(node->right, sum);
}
int sumNumbers(TreeNode* root) {
return dfs(root, 0);
}
};