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; } }
浙公网安备 33010602011771号