leetcode 86: Sum Root to Leaf Numbers
Sum Root to Leaf Numbers2
days
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
.
wrong try. bottom up. should use top bottom
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public int sumNumbers(TreeNode root) { // Start typing your Java solution below // DO NOT write main() function if(root==null) return 0; Pair pair = sumRec( root); return pair.first; } private Pair sumRec(TreeNode root) { if(root==null) { return new Pair(-1,0); } Pair left = sumRec(root.left); Pair right = sumRec(root.right); int x = root.val; int l = 0, r=0; if(left.first!=-1) { l = (int)(root.val * Math.pow(10,left.second)) + left.first; } else { l = 0; } if(right.first !=-1) { r = (int)(root.val * Math.pow(10,right.second)) + right.first; } else { r = 0; } return new Pair( l+r, (left.second>right.second ? left.second+1 : right.second+1) ); } static class Pair{ public int first; public int second; public Pair(int x, int y) {first=x; second=y;} } }
correct one:
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public int sumNumbers(TreeNode root) { // Start typing your Java solution below // DO NOT write main() function return sumRec(root, 0); } private int sumRec(TreeNode root, int num) { if(root==null) { return 0; } num = num*10 + root.val; int left=0, right=0; if(root.left!=null) left = sumRec(root.left, num); if(root.right!=null) right = sumRec(root.right, num); int res = left + right; return res==0? num : res; } }
final version:
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public int sumNumbers(TreeNode root) { // Start typing your Java solution below // DO NOT write main() function if(root==null) return 0; return sumRec(root, 0) ; } private int sumRec(TreeNode root, int parentSum) { int x = parentSum*10 + root.val; int l=0, r=0; if(root.left!=null) { l = sumRec(root.left, x); } if(root.right!=null) { r = sumRec(root.right, x); } if( l==0 && r==0) return x; else return l+r; } }