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