Problem:
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
.
Analysis:
Solutions:
C++:
int ArrayToNumber(const vector<int>& array)
{
int size = array.size();
int value = 0;
for(int i = 0; i < size; ++i) {
value *= 10;
value += array[i];
}
return value;
}
int sumNumbers(TreeNode* root) {
if(root == NULL)
return 0;
int sum = 0;
TreeNode *p_cur = root;
TreeNode *p_visited = NULL;
stack<TreeNode *> node_stack;
vector<int> array_number;
while(p_cur || !node_stack.empty()) {
if(p_cur) {
node_stack.push(p_cur);
array_number.push_back(p_cur->val);
p_cur = p_cur->left;
} else {
p_cur = node_stack.top();
if(p_cur->right == NULL || p_cur->right == p_visited) {
if(p_cur->right == NULL && p_cur->left == NULL)
sum += ArrayToNumber(array_number);
p_visited = p_cur;
node_stack.pop();
array_number.erase(array_number.end() - 1);
p_cur = NULL;
} else
p_cur = p_cur->right;
}
}
return sum;
}
Java
:
Python: