// 深度优先遍历,到达叶子节点时,将目前的数字加到结果里
class Solution {
public:
int sumNumbers(TreeNode* root) {
int res = 0;
vector<int> tmp;
sumNumbers(root, res, tmp);
return res;
}
void sumNumbers(TreeNode* root, int& res, vector<int>& tmp){
if (root == NULL)
return;
tmp.push_back(root->val);
if (root->left == NULL && root->right == NULL){
res += add(tmp);
tmp.pop_back();
return;
}
if (root->left == NULL)
sumNumbers(root->right, res, tmp);
else if (root->right == NULL)
sumNumbers(root->left, res, tmp);
else
sumNumbers(root->left, res, tmp), sumNumbers(root->right, res, tmp);
//push后记得pop
tmp.pop_back();
}
int add(vector<int>& tmp){
int cnt = 0;
for(int i = 0; i < tmp.size(); ++i)
cnt = 10 * cnt + tmp[i];
return cnt;
}
};
static int x=[](){
std::ios::sync_with_stdio(false);
cin.tie(NULL);
return 0;
}();