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

深度优先遍历 一个很重要的地方 递归就是栈的概念 path 先加入节点 once.add(root.cal) 这样二叉树的路径就会一直累加 最后 递归到叶子节点了 就要开始减 path.remove(once.size()-1); 相当于 根节点到叶子节点的一条完成 path 也会被清空

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param root TreeNode类 
     * @param sum int整型 
     * @return int整型ArrayList<ArrayList<>>
     */
    ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
    ArrayList<Integer> once = new ArrayList<Integer>();
    public ArrayList<ArrayList<Integer>> pathSum (TreeNode root, int sum) {
        // write code here
        dfs(root,sum);
        return res;
    }
    
    public void dfs(TreeNode root,int sum){
        if(root == null){
            return ;
        }
         once.add(root.val);
        sum-= root.val;
        if(root.left == null &&root.right==null && sum == 0){
            
        ArrayList<Integer> clonedList = new ArrayList<>();
            for (Integer num : once) {
                  clonedList.add(num);
            }
            
            res.add(clonedList);
        }
        if(root.left != null){
            
           dfs(root.left,sum);
        }
        if(root.right != null){
            dfs(root.right,sum);
        }
        
        once.remove(once.size()-1);
       
    }
}