import java.util.*;

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

public class Solution {
    ArrayList<ArrayList<Integer>> result = new ArrayList<>();
    /**
     *
     * @param root TreeNode类
     * @return int整型
     */
    public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int expectNumber) {
        if(root!=null) {
            dg(root, new ArrayList<>(), expectNumber);
        }
        return result;
    }

    private void dg (TreeNode root, ArrayList<Integer> lj, int expectNumber) {
        if(root==null) return;

        lj.add(root.val);
        if(root.left==null && root.right==null){ // 叶子节点,判断值与期望值是否相同
            if(root.val==expectNumber){
                result.add(new ArrayList<>(lj));
            }
        }
        expectNumber -= root.val;
        if(root.left!=null) dg(root.left, lj, expectNumber); // 遍历左子节点
        if(root.right!=null) dg(root.right, lj, expectNumber); // 遍历右子节点
        lj.remove(lj.size() - 1);
    }
}