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.
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val = val; * this.left = left; * this.right = right; * } * } */ class Solution { public int sumNumbers(TreeNode root) { if (root == null) { return 0; } List<List<Integer>> resList = new ArrayList<List<Integer>>(); List<Integer> curList = new ArrayList<Integer>(); helper(root, resList, curList); return sum(resList); } public void helper(TreeNode node, List<List<Integer>> resList, List<Integer> curList) { List<Integer> list = new ArrayList<>(curList); list.add(node.val); if (node.left == null && node.right == null) { resList.add(list); } if (node.left != null) { helper(node.left, resList, list); } if (node.right != null) { helper(node.right, resList, list); } } public int sum(List<List<Integer>> resList) { int sum = 0; for (List<Integer> aList : resList) { int cur = 0; int size = aList.size(); for (int i= size; i > 0; i--) { cur = cur + aList.get(size - i) * (int)Math.pow(10, i-1); } sum = sum + cur; } return sum; } }
LeetCode - Sum Root to Leaf Numbers
原文:https://www.cnblogs.com/incrediblechangshuo/p/12821887.html