Sum Root to Leaf Numbers
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
.
My initial solution used an arrayList to hold all root to leaf numbers, and then finally add them all.
public class Solution { ArrayList<Integer> result = new ArrayList<Integer>(); public int sumNumbers(TreeNode root) { if (root == null) return 0; sumNumbersHelper(root, 0); int total = 0; for (int a : result){ total += a; } return total; } public void sumNumbersHelper(TreeNode root, int sum){ if (root == null) return; sum = sum * 10 + root.val; if (root.left == null && root.right == null){ result.add(sum); return; } else { if (root.left != null) sumNumbersHelper(root.left, sum); if (root.right != null) sumNumbersHelper(root.right, sum); } } }
But later I found this much cleaner solution, do not need an arrayList. Instead, just sum them directly.
public class Solution { int result = 0; public int sumNumbers(TreeNode root) { if (root == null) return 0; sumNumbersHelper(root, 0); return result; } public void sumNumbersHelper(TreeNode root, int sum){ if (root == null) return; sum = sum * 10 + root.val; if (root.left == null && root.right == null){ result += sum; return; } else { if (root.left != null) sumNumbersHelper(root.left, sum); if (root.right != null) sumNumbersHelper(root.right, sum); } } }