import java.util.ArrayList; /** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null;

public TreeNode(int val) {
    this.val = val;

}

} */ public class Solution { ArrayList<ArrayList> list = new ArrayList<>(); public ArrayList<ArrayList> FindPath(TreeNode root,int expectNumber) { if(root == null) return list; dfs(root,expectNumber,0,new ArrayList());

	return this.list;
}

public void dfs(TreeNode root,int expectNumber,int num,ArrayList<Integer> tlist) {
	if(root.left==null && root.right==null) {
		if(num + root.val == expectNumber) {
			ArrayList<Integer> tlist1 = new ArrayList<>();
			for(int i  = 0;i < tlist.size();i++) {
				tlist1.add(tlist.get(i));
			}
			tlist1.add(root.val);
			this.list.add(tlist1);
		}
	}
	
	ArrayList<Integer> tlist1 = new ArrayList<>();
	for(int i  = 0;i < tlist.size();i++) {
		tlist1.add(tlist.get(i));
	}
	tlist1.add(root.val);
	num = num + root.val;
	if(root.left != null) {
		dfs(root.left,expectNumber,num,tlist1);
	}
	if(root.right != null) {
		dfs(root.right,expectNumber,num,tlist1);
	}
	
}

}

class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null;

public TreeNode(int val) {
    this.val = val;

}

}