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
.
这个题挺简单的,很快可以写出一个递归的解法,但是在返回时却一直返回初始值0.刚开始是百思不得其解啊,后来意识到,Java中参数传递时传递到函数中的参数都是原变量的一份拷贝,对于非类类型如int,float等,这份拷贝自然和原变量脱离了关系。所以,尽管拷贝值在path中发生了改变,返回sum还是原来的值0。
将sum变为类变量(全局变量就可以了)。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public int sumNumbers(TreeNode root) {
sum = 0;
if (root == null) return 0;
path(root,0);
return sum;
}
private void path(TreeNode node,int num){
num = num*10+node.val;
if (node.left == null && node.right == null){
sum = sum + num;
return;
}
if (node.left != null) {
path(node.left,num);
}
if (node.right != null){
path(node.right,num);
}
}
private int sum;
}