public static void pathSumHelper(ArrayList<ArrayList<Integer>> result, ArrayList<Integer> list,TreeNode node, int sum, int tempSum) {
        if(node == null) return;
        tempSum += node.val;
        list.add(node.val);
        //copy the list
        ArrayList<Integer> newCopyListL = new ArrayList<Integer>();
        ArrayList<Integer> newCopyListR = new ArrayList<Integer>();
        for(int i = 0; i< list.size() ;i++){
        	newCopyListL.add(list.get(i));
        	newCopyListR.add(list.get(i));
        }
        
        if(node.left == null && node.right == null){
        	if(tempSum == sum){
        		result.add(list);
        		return;
        	}else{
        		return;
        	}
        }
//        if(node.left != null && node.right == null){
//        	pathSumHelper(result, newCopyListL, node.left, sum, tempSum);
//        	return ;
//        }
//        if(node.left == null&& node.right != null){
//        	pathSumHelper(result, newCopyListR, node.right, sum, tempSum);
//        }
//        if(node.left == null&& node.right == null){
//        	pathSumHelper(result, newCopyListL, node.left, sum, tempSum);
//        	pathSumHelper(result, newCopyListR, node.right, sum, tempSum);
//        }
        
    	pathSumHelper(result, newCopyListL, node.left, sum, tempSum);
    	pathSumHelper(result, newCopyListR, node.right, sum, tempSum);
    }