二、从根到叶的二进制数之和(Weekly Contest 131)

本文介绍了一种解决树形结构遍历时数值溢出的方法,并提供了一个具体的代码实现案例。通过使用模运算避免数值过大导致的溢出问题,确保计算结果的准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:
在这里插入图片描述
这道题我调试了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);
		}
		
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值