d*****1 发帖数: 263 | 1 问题虽然解决了。但是,还是没有彻底明白。
问题是:Sum Root to Leaf Numbers (见链接)
http://oj.leetcode.com/problems/sum-root-to-leaf-numbers/
下面的3个方案,都是用了递归.
方案1: 利用了一个static 变量存储结果。
public class Solution{
public static int totalSum = 0;
public int sumNumbers(TreeNode root) {
if (root != null) {
getSum(root, 0);
}
return totalSum;
}
private void getSum(TreeNode node, int upperSum) {
if (node.left == null && node.right == null) {// find leaf
totalSum += (node.val + upperSum * 10);
return;
}
if (node.left != null) { // go further left
getSum(node.left, upperSum * 10 + node.val);
}
if (node.right != null) {
getSum(node.right, upperSum * 10 + node.val);
}
}
}
但下边的case 结果不对,leetcode给出的结果是10.
0
/
1
----------------搜了一下,说是“谨慎估计你添加新的类变量了”
“the result are accumulated...”
下面是方法2. 没有用 类变量。
public class Solution {
public int sumNumbers(TreeNode root) {
if (root == null) {
return 0;
}
return getSum(root, 0);
}
private int getSum(TreeNode node, int curSum) {
// return the new sum of the of the current
if (node.left == null && node.right == null) {// find leaf
return (node.val + curSum * 10);
}
int sumLeft =0, sumRight =0;
if (node.left != null) { // go further left
sumLeft = getSum(node.left, curSum * 10 + node.val);
}
if (node.right != null) {// go further left
sumRight = getSum(node.right, curSum * 10 + node.val);
}
return sumLeft + sumRight;
}
}
请问为什么?????????
FYI: 这个问题,以前遇到过,本以为是leetcode暂时的问题。就给1873发了邮件。大
神回信指点说,变量没有initialize. | i**********e 发帖数: 1145 | 2 http://oj.leetcode.com/discuss/553/why-the-result-from-qj-is-di
【在 d*****1 的大作中提到】 : 问题虽然解决了。但是,还是没有彻底明白。 : 问题是:Sum Root to Leaf Numbers (见链接) : http://oj.leetcode.com/problems/sum-root-to-leaf-numbers/ : 下面的3个方案,都是用了递归. : 方案1: 利用了一个static 变量存储结果。 : public class Solution{ : public static int totalSum = 0; : public int sumNumbers(TreeNode root) { : if (root != null) { : getSum(root, 0);
| d*****1 发帖数: 263 | |
|