【发布时间】:2018-02-02 20:07:25
【问题描述】:
有人可以澄清递归调用以解决此问题吗:
给定一棵仅包含 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是。 -
从根到叶的路径也拼写为 124 和 125,您的实际结果和预期结果都是关闭的。
-
那么
node.left == null || node.right == null案例呢? -
@alain 结果是否等于 124+125+13?
-
我会说是的。