题解 | #二叉树中和为某一值的路径(二)#
二叉树中和为某一值的路径(二)
https://www.nowcoder.com/practice/b736e784e3e34731af99065031301bca
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); } }
解题思想:队列+递归+回朔
#算法##算法笔记#