用栈的结构性质,然后递归就行。
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;
}
}
京公网安备 11010502036488号