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.
We can start from the root node and perform a breadth first search. If one path reaches to the end, push the current num into a list and finally add them together.
C++ Code:
/*
* func: root_leaf_sum_helper
* goal: helper function for root_leaf_sum to perform BFS
* @param root: root node of the tree
* @param vec: vector to store each value
* @param num: current num in string format
* return:
*/
void root_leaf_sum_helper(TreeNode *root, vector<string> &vec, string num){
if(root == nullptr){
return;
}else if(root->left == nullptr && root->right == nullptr){
num += char(root->val + '0');
vec.emplace_back(num);
return;
}else{
num += char(root->val + '0');
root_leaf_sum_helper(root->right, vec, num);
root_leaf_sum_helper(root->left, vec, num);
}
}
/*
* func: root_leaf_sum
* goal: find the total sum of all root-to-leaf numbers
* @param root: root node of the tree
* return: total sum
*/
int root_leaf_sum(TreeNode *root){
vector<string> vec;
string num = "";
root_leaf_sum_helper(root, vec, num);
int result = 0;
for(const string &str : vec){
result += atoi(str.c_str());
}
return result;
}
Python Code:
# func: find the sum of all numbers constructed from root to leaf
# @param root: root node of the tree
# @return: sum
def sum_root_leaf(root):
if not root:
return 0
else:
def sum_root_leaf_helper(val, node):
if not node.left and not node.right:
return val
elif not node.left:
return sum_root_leaf_helper(val * 10 + node.right.val, node.right)
elif not node.right:
return sum_root_leaf_helper(val * 10 + node.left.val, node.left)
else:
return sum_root_leaf_helper(val * 10 + node.left.val, node.left) + \
sum_root_leaf_helper(val * 10 + node.right.val, node.right)
return sum_root_leaf_helper(root.val, root)
No comments:
Post a Comment