leetcode_129:Sum Root to Leaf Numbers

这个题目一看肯定是递归,关键的问题是如何保存上面已经遍历并计算过的值。所以当我们写递归函数的时候,肯定是有一个参数是上一个已经计算过的值,而有了上一个值,我们就可以计算本层所得到的新值,同时继续向下计算,所以也有一个参数是得到下面的值(左右子节点)。于是我们就得出了这个函数的形状:

    private int helper(int pre, TreeNode tree) {
        if (tree == null)	//如果某一个子节点是空,要返回0
            return 0;
        //到了叶子节点,结果应是上一次计算好的值乘10加上当前根节点的值
        if (tree.left == null && tree.right == null) {	
            return pre * 10 + tree.val;
        }
        //否则还没到叶子,则把当前这一层计算的值pre*10+tree.val作为下一层的pre值。
        return helper(pre*10+tree.val, tree.left) + helper(pre*10+tree.val, tree.right);
    }

那么主函数只需要调用helper(root.val, root.left) + helper(root.val, root.right)就行了,即把根节点的值作为已经计算好的,然后得到左右子节点。代码如下:

    public int sumNumbers(TreeNode root) {
        if (root == null)	//空树
            return 0;
        if (root.left == null && root.right == null)	//只有一个根节点
            return root.val;
        return helper(root.val, root.left) + helper(root.val, root.right);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值