可能有人为对这个问题的解决方案提供一种澄清的递归调用:澄清
给出一个包含有从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'的情况? –