题目大意:给出一个二叉树,二叉树中每个从根节点到叶子节点的路径表示一个整数,其中路径中的每个节点值表示整数的一个数位,将这些所有整数求和并返回。
算法思想:
1.整体算法思想如同LeetCode---Binary Tree Paths
2.只需将每条路径表示的字符串转化为数字,然后将这些数字加起来。
代码如下:
/**
* 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:
int sumNumbers(TreeNode* root) {
vector<int> res;
if(root==NULL) return 0;
string tmp;
vector<TreeNode*> nodes;
stack<pair<TreeNode*,TreeNode*> > S;
bool flag=false;
pair< TreeNode*, TreeNode*> cur;
S.push(make_pair(root,( TreeNode*)NULL));
while(!S.empty()){
cur=S.top();
S.pop();
if(flag){
while(cur.second!=nodes.back()){
nodes.pop_back();
tmp.erase(tmp.end()-1);
}
flag=false;
}
tmp.push_back(cur.first->val+'0');
nodes.push_back(cur.first);
if(cur.first->right==NULL&&cur.first->left==NULL){
cout<<"path:"<<tmp<<endl;
int a;
sscanf(tmp.c_str(),"%d",&a);
res.push_back(a);
flag=true;
}
if(cur.first->right!=NULL)
S.push(make_pair(cur.first->right,cur.first));
if(cur.first->left!=NULL)
S.push(make_pair(cur.first->left,cur.first));
}
int sum=0;
for(int i=0;i<res.size();++i){
sum+=res[i];
}
return sum;
}
};