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 path1->2represents the number12. The root-to-leaf path1->3represents the number13. 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 path4->9->5represents the number 495. The root-to-leaf path4->9->1represents the number 491. The root-to-leaf path4->0represents the number 40. Therefore, sum = 495 + 491 + 40 =1026.
求根到叶子节点数字之和。题意是给一棵二叉树,请根据图示做加法。
思路是前序遍历递归做。记录一个变量sum存之前所有的加和,当遍历到当前节点的时候,sum *= 10 再加当前的节点值cur.val。
时间O(n)
空间O(n)
Java实现
1 class Solution { 2 int total; 3 4 public int sumNumbers(TreeNode root) { 5 total = 0; 6 helper(root, total); 7 return total; 8 } 9 10 private void helper(TreeNode root, int sum) { 11 if (root == null) { 12 return; 13 } 14 sum = sum * 10 + root.val; 15 if (root.left == null && root.right == null) { 16 total += sum; 17 return; 18 } 19 helper(root.left, sum); 20 helper(root.right, sum); 21 } 22 }
JavaScript实现
1 /** 2 * @param {TreeNode} root 3 * @return {number} 4 */ 5 var sumNumbers = function (root) { 6 if (root == null) { 7 return 0; 8 } 9 var total = 0; 10 helper(root, 0); 11 return total; 12 13 function helper(root, sum) { 14 if (root == null) { 15 return; 16 } 17 sum = sum * 10 + root.val; 18 if (root.left == null && root.right == null) { 19 total += sum; 20 return; 21 } 22 helper(root.left, sum); 23 helper(root.right, sum); 24 } 25 };
相关题目