请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

波波老师,您可以看看我leetcode129题的问题么

波波老师,leetcode129题,我传入的计算总数的res传入0之后,为啥最后输出总是0呢?我很费解,不知道哪里出了问题,您可以帮我看看么?谢谢老师

class Solution {
    public int sumNumbers(TreeNode root) {
        if(root == null) 
            return 0;
        int res = 0;//这里是计算sum的变量
        dfs(root, res, 0);//dfs(root,计算sum,每个节点值*10后加上val)
        return res;//这里return后好像还是初始化的0的值,我不知道哪里有问题
    }
    private void dfs(TreeNode node, int res, int targetNum){
        if(node == null)
            return ;
        targetNum = targetNum *10 + node.val;
        if(node.left == null && node.right == null)
            res += targetNum;
        dfs(node.left, res, targetNum);
        dfs(node.right, res, targetNum);
    }
}

正在回答 回答被采纳积分+3

2回答

提问者 v不离不弃v 2020-03-22 11:27:25

下面回答中的leetcode113题代码,利用回溯的思想。

public List<List<Integer>> pathSum(TreeNode root, int sum) {
        List<List<Integer>> res = new ArrayList<>();
        ArrayList<Integer> res1 = new ArrayList<>();
        if(root == null)
            return res;
        dfs(root, sum, res, res1);
        return res;    
    }
    private void dfs(TreeNode node, int sum, 
                     List<List<Integer>> res, ArrayList<Integer> res1){
        if(node == null)
            return ;
        res1.add(node.val);
        if(node.left == null && node.right == null && sum - node.val == 0)
            res.add(new ArrayList(res1));
        dfs(node.left, sum - node.val, res, res1);
        dfs(node.right, sum - node.val, res, res1);
        res1.remove(res1.size() - 1);
    }


0 回复 有任何疑惑可以回复我~
liuyubobobo 2020-03-22 10:26:35

res 进了函数就是这个函数的局部变量,和外面的 res 已经不是一回事儿了。


你的思路,应该把 res 设计成整个类的成员变量。


继续加油!:)

0 回复 有任何疑惑可以回复我~
  • 提问者 v不离不弃v #1
    波波我还是有些不明白,这个res我不是已经在dfs这个函数外面设置了么?我记得113题为啥ArrayList 传入dfs中,return 这个list就没问题呢?
    
    
    对了波波老师,这一题可以用回溯做嘛?
    回复 有任何疑惑可以回复我~ 2020-03-22 10:31:12
  • 提问者 v不离不弃v #2
    波波老师我大概明白了,如果res在函数中,那么他就是个局部变量,res=0,就算传入到dfs(root,res,0)中,那么dfs中的res只是作为一个0的值传入的,无论在dfs这个函数中如何操作,那么操作的也仅仅是dfs(res)中res变量的值,并不是原有函数中res的值,所以就要把res作为全局变量定义在这个类中,对嘛?
    
    波波老师,我还有个疑惑就是,对于leetcode113题中,在函数中定义局部变量List 和 List<List<>> 然后传入到dfs中,为啥在函数中返回list就可以呢?代码在上面给出。
    回复 有任何疑惑可以回复我~ 2020-03-22 11:25:49
  • liuyubobobo 回复 提问者 v不离不弃v #3
    int 是基本数据类型,是传值;List 是对象,是传引用。
    回复 有任何疑惑可以回复我~ 2020-03-22 11:30:01
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信