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.
Note: A leaf is a node with no children.
Example:
Input: [1,2,3] 1 / 2 3 Output: 25 Explanation: The root-to-leaf path 1->2 represents the number 12. The root-to-leaf path 1->3 represents the number 13. Therefore, sum = 12 + 13 = 25.
Example 2:
Input: [4,9,0,5,1] 4 / 9 0 / 5 1 Output: 1026 Explanation: The root-to-leaf path 4->9->5 represents the number 495. The root-to-leaf path 4->9->1 represents the number 491. The root-to-leaf path 4->0 represents the number 40. Therefore, sum = 495 + 491 + 40 = 1026
Approach #1: C++.[recursive]
/** * 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) { if (root == NULL) return 0; vector<string> sumRoot; helper(root, sumRoot, ""); int ans = 0; for (string num : sumRoot) ans += stoi(num); return ans; } private: void helper(TreeNode* root, vector<string>& sumRoot, string sum) { if (root == NULL) return; if (root->left == NULL && root->right == NULL) { sum = sum+to_string(root->val); sumRoot.push_back(sum); return; } helper(root->left, sumRoot, sum+to_string(root->val)); helper(root->right, sumRoot, sum+to_string(root->val)); } };
Approach #2: Java.[recursive]
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public int sumNumbers(TreeNode root) { return sum(root, 0); } private int sum(TreeNode root, int s) { if (root == null) return 0; if (root.left == null && root.right == null) return s*10 + root.val; return sum(root.left, s*10 + root.val) + sum(root.right, s*10 + root.val); } }
Approach #3: Python. [dfs+stack]
# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution(object): def sumNumbers(self, root): """ :type root: TreeNode :rtype: int """ if not root: return 0 res, stack = 0, [(root, root.val)] while stack: node, value = stack.pop() if node: if not node.left and not node.right: res += value if node.left: stack.append((node.left, value*10 + node.left.val)) if node.right: stack.append((node.right, value*10 + node.right.val)) return res