LeetCode OJ:Sum Root to Leaf Numbers

来源:互联网 发布:陈明道知乎 编辑:程序博客网 时间:2024/04/24 16:56

Sum Root to Leaf Numbers

 Total Accepted: 5395 Total Submissions: 19143My Submissions

Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number.

An example is the root-to-leaf path 1->2->3 which represents the number 123.

Find the total sum of all root-to-leaf numbers.

For example,

    1   / \  2   3

The root-to-leaf path 1->2 represents the number 12.
The root-to-leaf path 1->3 represents the number 13.

Return the sum = 12 + 13 = 25.



/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ #include <algorithm>class Solution{vector<vector<int>> SUM;int length;public:int add(vector<vector<int>> store){vector<int> total;int v,c=0;for(int i=1;i<=length;i++){v=c;;for(int j=0;j<store.size();j++){if(store[j].size()>=i){v+=store[j][store[j].size()-i];}}c=v/10;total.push_back(v%10);}if(c)total.push_back(c);string sum="";char t[4];for(int i=total.size()-1;i>=0;i--){sprintf(t,"%d",total[i]);sum+=t;}return atoi(sum.c_str());}void dfs(TreeNode *root,vector<int> store){if(root==NULL)return;store.push_back(root->val);if(root->left==NULL&&root->right==NULL){length=length<store.size()?store.size():length;SUM.push_back(store);return;}dfs(root->left,store);dfs(root->right,store);}int sumNumbers(TreeNode *root){if(!root)return 0;vector<int> t;length=0;dfs(root,t);return add(SUM);}};


简约版

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    int sumNumbers(TreeNode *root) {        return dfs(root,0);    }private:    int dfs(TreeNode *root,int sum){        if(!root)return 0;        if(root->left==NULL&&root->right==NULL)            return sum*10+root->val;                return dfs(root->left,sum*10+root->val)+                dfs(root->right,sum*10+root->val);    }};


0 0
原创粉丝点击