这题不难,但是我还是没写对。再练。
public class Solution {
int sum = 0;
public int sumNumbers(TreeNode root) {
if(root == null)
if(root.left != null){
sum += root.val * 10 + sumNumbers(root.left);
}
if(root.right != null){
sum += root.val * 10 + sumNumbers(root.right);
}
return sum;
}
}
@8.31.2014 还是写错了
public class Solution {
public int sumNumbers(TreeNode root) {
if(root == null) return 0;
return dfs(root, 0);
}
public int dfs(TreeNode root, int sum){
if(root.left == null && root.right == null) return root.val;
int result = 0;
if(root.left != null){
result += dfs(root.left, root.val * 10 + root.left.val);
}
if(root.right != null){
result += dfs(root.right, root.val * 10 + root.right.val);
}
return result;
}
}
这段代码是错误的。因为不是root.val × 10, 而是到root为止的路径上得到的sum × 10. 正确代码:
public class Solution {
public int sumNumbers(TreeNode root) {
return sumNumbers(root, 0);
}
public int sumNumbers(TreeNode root, int sum) {
if(root == null) return 0;
int result = sum*10 + root.val;
if(root.left == null && root.right == null){
return result;
}
else return sumNumbers(root.left, result) + sumNumbers(root.right, result);//注意这一句
}
}