回溯法DFS

二叉树根节点到叶子节点和为指定值的路径

http://www.nowcoder.com/questionTerminal/840dd2dc4fbd4b2199cd48f2dadf930a

import java.util.ArrayList;

public class 根节点到叶子节点的路径和 {

/**
 * 使用回溯法,从根节点开始。每遍历一个节点,就将该节点的值放入路径中,
 * 判断是否为叶子节点,当前nowsum是否与sum相等,
 * 相等就将list加入到结果中,否则回退,回退要将list的最后一个元素删除。
 */
ArrayList<ArrayList<Integer>> res=new ArrayList<>();
public ArrayList<ArrayList<Integer>> pathSum (TreeNode root, int sum) {
    // write code here
    ArrayList<Integer> path=new ArrayList<>();
    if (root==null)return res;
    dfs(root,0,sum,path); 
    return res;
}

public void dfs(TreeNode root, int nowsum, int sum, ArrayList<Integer> list){
    list.add(root.val);
    //判断是否为叶子节点,当前nowsum是否与sum相等,
    if (root.right==null&&root.left==null&&sum==(nowsum+root.val)){
        //相等就将list加入到结果中,
        res.add(new ArrayList<>(list));return;
    }
    if (root.left!=null) {
        dfs(root.left,nowsum+root.val,sum,list);
        list.remove(list.size()-1);
    }
    if (root.right!=null){
        dfs(root.right,nowsum+root.val,sum,list);
        list.remove(list.size()-1);
    }
}

}

全部评论
list相当于是一个往res中添加数据的中介容器,每完成一次添加后需要清空,不然后面再用这个中介就会有之前重复的残余。再new 一个list就达到了清空list的目的
1 回复 分享
发布于 2021-05-16 15:26
刚从c转java,请问20行为什么不能是res.add(list)呢?
点赞 回复 分享
发布于 2021-03-10 15:51

相关推荐

09-29 11:19
门头沟学院 Java
点赞 评论 收藏
分享
霁华Tel:秋招结束了,好累。我自编了一篇对话,语言别人看不懂,我觉得有某种力量在控制我的身体,我明明觉得有些东西就在眼前,但身边的人却说啥也没有,有神秘人通过电视,手机等在暗暗的给我发信号,我有时候会突然觉得身体的某一部分不属于我了。面对不同的人或场合,我表现出不一样的自己,以至于都不知道自己到底是什么样子的人。我觉得我已经做的很好,不需要其他人的建议和批评,我有些时候难以控制的兴奋,但是呼吸都让人开心。
点赞 评论 收藏
分享
5 收藏 评论
分享
牛客网
牛客企业服务