import java.util.ArrayList;
import java.util.LinkedList;
import java.util.stream.Collectors;
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root, int expectNumber) {
ArrayList<ArrayList<Integer>> results = new ArrayList<>();
LinkedList<Integer> queue = new LinkedList<>();
int sum = 0;
if (root != null) {
addDatas(root, expectNumber, results, queue, sum);
}
return results;
}
private void addDatas(TreeNode root, int expectNumber,
ArrayList<ArrayList<Integer>> results, LinkedList<Integer> queue, int sum) {
if (root != null) {
sum += root.val;
queue.add(root.val);
if (sum == expectNumber && root.left == null && root.right == null) {
addResult(results, queue);
} else {
addDatas(root.left, expectNumber, results, queue, sum);
addDatas(root.right, expectNumber, results, queue, sum);
}
queue.pollLast();
sum -= root.val;
}
}
private void addResult(ArrayList<ArrayList<Integer>> results,
LinkedList<Integer> queue) {
// 循环队列中的元素
ArrayList<Integer> result = (ArrayList)queue.stream().collect(
Collectors.toList());
results.add(result);
}
}
解题思想:队列+递归+回朔

京公网安备 11010502036488号