問題是:計算所有根到葉數的總和。例如:如果樹是(1,2,3),1是根,2是左孩子,3是右孩子,兩個路徑:1-> 2 1-> 3,sum = 12 + 13 = 25樹:根到葉和(遞歸)
這是我正確的遞歸解決方案。在輔助方法,返回總和:
public int sumNumbers(TreeNode root) {
if (root == null) {
return 0;
}
return getSum(root, 0);
}
private int getSum(TreeNode root, int value) {
if (root.left == null && root.right == null) {
return root.val + value * 10;
}
int sum = 0;
if (root.left != null) {
sum += getSum(root.left, value * 10 + root.val);
}
if (root.right != null) {
sum += getSum(root.right, value * 10 + root.val);
}
return sum;
}
,但是當我加入sum
作爲輔助方法的參數,我總是得到0
public int getSum(TreeNode root) {
int sum = 0, path = 0;
helper(root, path, sum);
return sum;
}
private void helper(TreeNode root, int path, int sum) {
if (root == null) {
return;
}
int path = 10 * path + root.val;
if (root.left == null && root.right == null) {
sum += path;
return;
}
helper(root.left, path, sum);
helper(root.right, path, sum);
}
我相信一定會有一些點我誤解了遞歸。預先感謝你給我一些解釋,爲什麼sum
的值不是'轉移'回sum
的getSum
方法。
Java是按值傳遞的。當你在'getSum'方法中執行'helper(root,path,sum)'時,它不會更新你傳遞的sum變量作爲參數。 – 2014-12-10 22:27:51
@鄒鄒謝謝。所以,無論輔助方法發生了什麼,getSum中的總和保持不變。但如果可能參數是列表,則值將被更新。 –
2014-12-10 22:39:51