class Solution { public List<List<Integer>> pathSum(TreeNode root, int targetSum) { List<List<Integer>> list = new LinkedList<>(); /** * 如果节点为空,返回空列表 */ if (root == null){ return list; } /** * 如果是叶子节点,且数值满足目标,就放在一个子列表,然后添加进总的列表 */ if (root.left == null && root.right == null){ if (root.val == targetSum){ List<Integer> temp = new LinkedList<>(); temp.add(0, root.val); list.add(temp); } } /** * 否则,递归遍历左右孩子,获得所有的路径可能,最后将根节点加上 */ List<List<Integer>> left = pathSum(root.left, targetSum - root.val); List<List<Integer>> right= pathSum(root.right, targetSum - root.val); for (int i = 0; i < left.size(); i++) { left.get(i).add(0, root.val); list.add(left.get(i)); } for (int i = 0; i < right.size(); i++) { right.get(i).add(0, root.val); list.add(right.get(i)); } return list; } } /** * 时间复杂度 O(n^2) * 空间复杂度 O(logn) */
https://leetcode-cn.com/problems/path-sum-ii/