sum_root_leaf_num.c (1210B)
| // 129. Sum Root to Leaf Numbers
#include "leetcode.h"
/*
* given 'root' of binary tree containing digits 0-9 only. each root-to-leaf
* pattern in the tree represents a number. eg. root-to-leaf path 1->2->3
* represents the integer 123. return total sum of all root-to-leaf numbers.
* test cases will fit in 32-bit integer. a leaf node is a node with no children
*/
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
struct TreeNode *createNode(int val) {
struct TreeNode *new_node =
(struct TreeNode *)malloc(sizeof(struct TreeNode));
new_node->val = val;
new_node->left = NULL;
new_node->right = NULL;
return new_node;
}
int calc_num(struct TreeNode *root, int tree_num) {
if (!root)
return 0;
return !root->left && !root->right
? tree_num * 10 + root->val
: calc_num(root->left, tree_num * 10 + root->val) +
calc_num(root->right, tree_num * 10 + root->val);
}
int sumNumbers(struct TreeNode *root) { return calc_num(root, 0); }
int main() {
struct TreeNode *root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
printf("%d\n", sumNumbers(root)); // expect: 25
}
|