方法1: dfs using recursion。这题很明显是dfs。时间复杂nlogn,空间复杂n^2。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<List<Integer>> pathSum(TreeNode root, int sum) {
List<List<Integer>> res = new ArrayList<>();
List<Integer> list1 = new ArrayList<>();
// base case;
if((root == null) || (root.left == null && root.right == null && root.val != sum)){
return res;
}
if(root.left == null && root.right == null && root.val == sum){
list1.add(root.val);
res.add(list1);
return res;
}
List<List<Integer>> leftList = new ArrayList();
List<List<Integer>> rightList = new ArrayList();
if(root.left == null) {
rightList = pathSum(root.right, sum-root.val);
if(rightList.size() != 0){
for(List list : rightList){
list.add(0,root.val);
}
}
return rightList;
}else if(root.right == null){
leftList = pathSum(root.left, sum-root.val);
if(leftList.size() != 0){
for(List list : leftList){
list.add(0,root.val);
}
}
return leftList;
}else{
leftList = pathSum(root.left, sum-root.val);
if(leftList.size() != 0){
for(List list : leftList){
list.add(0,root.val);
}
}
rightList = pathSum(root.right, sum-root.val);
if(rightList.size() != 0){
for(List list : rightList){
list.add(0,root.val);
}
}
for(List list : rightList){
leftList.add(list);
}
return leftList;
}
}
}
总结:
- 无