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 a binary tree node.
* 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);
}
int dfs(TreeNode* root,int sum)
{
if(root == NULL) return 0;
if(root->left == NULL && root->right == NULL) return root->val + sum * 10;
return dfs(root->left, root->val + sum * 10) + dfs(root->right, root->val + sum * 10);
}
};
非递归解法:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int sumNumbers(TreeNode* root) {
int sum = 0;
if(root == NULL)
return sum;
queue<TreeNode*> queue;
queue.push(root);
while(!queue.empty()) {
int levelLen = queue.size();
for (int i = 0; i < levelLen; i++) {
TreeNode* node = queue.front();
queue.pop();
if(node->left == NULL && node->right == NULL)
sum += node->val;
if(node->left != NULL) {
node->left->val += node->val * 10;
queue.push(node->left);
}
if(node->right != NULL) {
node->right->val += node->val * 10;
queue.push(node->right);
}
}
}
return sum;
}
};