可能有人爲對這個問題的解決方案提供一種澄清的遞歸調用:澄清
給出一個包含有從0-9只,每根到葉的數字 的二進制樹路徑可以代表一個數字。查找所有從根到葉 號碼的總和。
例如,對於此樹:
1
/\
2 3
/ \
4 5
的結果應該等於12 + 13 + 24 + 25
此問題的遞歸解決方案是:
public int sum(TreeNode root) {
return helper(root, 0);
}
private int helper(TreeNode node, int sum){
if(node == null) return 0;
sum = sum * 10 + node.val;
if(node.left == null && node.right == null) return sum;
return helper(node.left, sum) + helper(node.right, sum);
}
我想遵循方法helper
的所有遞歸調用,並在每一步找出總和值。
例如,在第一步驟中可變sum
等於0 * 10 + 1 = 1。然後我們稱之爲helper(node.left, 1)
和sum
對步驟等於1 * 10 + 2 = 12
。然後,我們在該步驟上呼叫helper(node.left, 12)
和sum
等於12 * 10 + 4 = 124
,這顯然是不正確的,因爲sum
應該是24
。
有人能解釋我的方法有什麼問題嗎?
'解決方案'並不真正符合問題。 '24'不是根到葉的數字,而是'124'。 – alain
根到葉的路徑也是拼寫124和125,你的實際和預期結果都是關閉的。 –
那麼'node.left == null ||怎麼樣? node.right == null'的情況? –