回溯法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

相关推荐

smile丶snow:项目完成时间要写一个大概的区间,自己顺延一下就行。感觉ai对话的放第一个比较好。可以自己编一些场景或者找ai编一个场景。就是你为什么要写这个仿DeepSeek对话应用。比如你自己有很多文档,这个ai可以基于你自己的文档回答之类的。个人建议~具体看你自己。 还有项目中用到那些更好让ai coding的方法也可以写一下,毕竟现在ai大跃进…
简历被挂麻了,求建议
点赞 评论 收藏
分享
评论
5
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务