Given a binary tree containing digits from
An example is the root-to-leaf path
Find the total sum of all root-to-leaf numbers.
For example,
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
The root-to-leaf path
Return the sum = 12 + 13 =
Analysis:1->2 represents the number 12.The root-to-leaf path
1->3 represents the number 13.Return the sum = 12 + 13 =
25.This problem should be straightforward, we need to traverse to each leaf to form a number, and add all the numbers together. We use a vector<int> to store the traversed node's value.
Code:
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
// Recursive - preorder
int sumNumbers(TreeNode *root) {
if (root==NULL) return 0;
vector<int> sum;
int nodeSum=0;
dfs(root, sum, nodeSum);
nodeSum=0;
for (int i=0; i<sum.size(); i++) {
nodeSum += sum[i];
}
return nodeSum;
}
void dfs(TreeNode *node, vector<int> & sum, int nodeSum) {
nodeSum = 10*nodeSum+node->val;
if (node->left==NULL && node->right==NULL) {
sum.push_back(nodeSum);
}
else {
if (node->left!=NULL)
dfs(node->left, sum, nodeSum);
if (node->right!=NULL)
dfs(node->right, sum, nodeSum);
}
}
};
No comments:
Post a Comment