题目描述:
这道题我调试了n遍,我去一开始直接写的时long ge = 10^7 + 9 ,发现这里有一个bug,这样会溢出,直接就错了,因此要写的时1000000+9,然后是
代码:
解释:
getsum函数是用来将所有的结果放入到list中,然后我们计算,需要注意的是防止溢出,我们需要每次都模上那个最大的数;
class Solution {
public int sumRootToLeaf(TreeNode root) {
List<List<Integer>> result = new ArrayList<>();
List<Integer> tem = new ArrayList<>();
if(root == null ){
return 0;
}
getsum(root, result, tem);
int ge = 1000000000 + 7;
System.out.println(result.toString());
int sum = 0;
for (List<Integer> integer : result) {
int size = integer.size();
int sumtem = 0;
for (Integer integer2 : integer) {
if(integer2 == 1){
int tes = 1;
for (int i = 0; i < size - 1; i++) {
tes *= 2;
tes %= ge;
}
sumtem += tes;
sumtem %= ge;
}
size --;
}
sum += sumtem;
sum %= ge;
}
return sum;
}
public void getsum(TreeNode node,List<List<Integer>> result,List<Integer> tem){
if(node.left == null && node.right == null){
tem.add(node.val);
List<Integer> ges = new ArrayList<>(tem);
result.add(ges);
return ;
}
tem.add(node.val);
if(node.right != null){
getsum(node.right, result, tem);
tem.remove(tem.size() - 1);
}
if(node.left != null){
getsum(node.left, result, tem);
tem.remove(tem.size() - 1);
}
}
}