LeetCode---Sum Root to Leaf Numbers

来源:互联网 发布:javascript 资源 网盘 编辑:程序博客网 时间:2024/05/02 05:04

题目大意:给出一个二叉树,二叉树中每个从根节点到叶子节点的路径表示一个整数,其中路径中的每个节点值表示整数的一个数位,将这些所有整数求和并返回。

算法思想:

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;    }};


0 0
原创粉丝点击