首页 > 代码库 > [LeetCode#129]Sum Root to Leaf Numbers
[LeetCode#129]Sum Root to Leaf Numbers
The problem:
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 first analysis:
Key:
1. we search on the tree, and record all pathes in an ArrayList as return value.
2. we add the number(represented by each ArrayList) to get the final result.
possible pitfall:
We usually use sum += val to get the total sum.
However it‘s not suitable for this case, since we have already use "sub_sum * 10 + ret.get(i).get(j)" for representing current value.
You must be very carful about this!!!
My first solution:
Note: sub_sum = sub_sum * 10 + ret.get(i).get(j), not sub_sum + = sub_sum * 10 + ret.get(i).get(j)
public class Solution { public int sumNumbers(TreeNode root) { if (root == null) return 0; ArrayList<ArrayList<Integer>> ret = new ArrayList<ArrayList<Integer>> (); ArrayList<Integer> ans = new ArrayList<Integer>(); get_path(root, ans, ret); int sum = 0; int sub_sum = 0; for (int i = 0; i < ret.size(); i++) { for (int j = 0; j < ret.get(i).size(); j++) { sub_sum = sub_sum * 10 + ret.get(i).get(j); //not sub_sum += sub_sum * 10 + ret.get(i).get(j); } sum += sub_sum; sub_sum = 0; } return sum; } private void get_path(TreeNode cur_root, ArrayList<Integer> ans, ArrayList<ArrayList<Integer>> ret) { if (cur_root == null) return; ArrayList<Integer> cur_list = new ArrayList<Integer> (ans); cur_list.add(cur_root.val); if (cur_root.left == null && cur_root.right == null) { ret.add(cur_list); return; } get_path(cur_root.left, cur_list, ret); get_path(cur_root.right, cur_list, ret); }}
My second solution:
public class Solution { public int sumNumbers(TreeNode root) { return helper(root, 0); } private int helper(TreeNode root, int sum) { //the sum is a little misleading!!! take care! if (root == null) return 0; if (root.left == null && root.right == null) return sum * 10 + root.val; return helper(root.left, sum * 10 + root.val) + helper(root.right, sum * 10 + root.val); }}
[LeetCode#129]Sum Root to Leaf Numbers