用栈的结构性质,然后递归就行。

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<>>
     */
    public ArrayList<ArrayList<Integer>> pathSum (TreeNode root, int sum) {
      Stack<Integer> stack = new Stack<Integer>();
        ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
        result = allPath(result, stack, root, sum);
        return result;
    }
    public ArrayList<ArrayList<Integer>> allPath(ArrayList<ArrayList<Integer>> result,Stack<Integer> stack,TreeNode root,int sum){
        if(root!=null) {
            stack.push(root.val);
            if(root.left==null&&root.right==null) {
                //到了叶子,不能往下了,则此时栈类的元素均为一条路劲上的,然后判断栈类的元素和是否为给定的sum
                int num = 0;
                for (int i = 0; i < stack.size(); i++) {
                    num+=stack.get(i);
                }
                if(num==sum) {//判断栈类的元素和是否为给定的sum,若等于,则将其依次添加进入listz中
                    ArrayList<Integer> list = new ArrayList<Integer>();
                    for (int i = 0; i < stack.size(); i++) {
                         list.add(stack.get(i));
                    }
                    result.add(list);
                }
            }
        allPath(result, stack, root.left, sum);
        allPath(result, stack, root.right, sum);
        stack.pop();//往上走了,则出栈一个。
        }


        return result;
    }
}