</pre><pre name="code" class="cpp">/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
//非递归DFS遍历
class Solution {
public:
int sumNumbers(TreeNode* root) {
if(root==nullptr)return 0;
unordered_map<TreeNode*,bool> map;
stack<TreeNode*> stk;
stk.push(root);
map[root]=true;
int sum = 0;
int cnt=root->val;
while(!stk.empty()){
TreeNode* tmp = stk.top();
if(tmp->left&&map[tmp->left]==false){
stk.push(tmp->left);
map[tmp->left]=true;
cnt=cnt*10+tmp->left->val;
continue;
}
if(tmp->right&&map[tmp->right]==false){
stk.push(tmp->right);
map[tmp->right]=true;
cnt=cnt*10+tmp->right->val;
continue;
}
if(tmp->left==nullptr&&tmp->right==nullptr){
sum+=cnt;
}
stk.pop();
cnt-=tmp->val;
cnt/=10;
}
return sum;
}
};
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
//递归遍历
class Solution {
public:
void DFS(TreeNode* root,int val){
if(root->left==nullptr&&root->right==nullptr)sum+=val;
if(root->left)DFS(root->left,val*10+root->left->val);
if(root->right)DFS(root->right,val*10+root->right->val);
}
int sumNumbers(TreeNode* root) {
if(root==nullptr) return 0;
sum=0;
DFS(root,root->val);
return sum;
}
private:
int sum;
};