解题思路
dfs即可,找到每个叶子节点时的sum值,如果等于target就返回,并返回对应的路径
需要维护住路径road
代码
/**
* 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 {
List<List<Integer>> ans;
public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
ans = new ArrayList<>();
LinkedList<Integer> road = new LinkedList<>();
if (root==null) return ans;
road.add(root.val);//加入根节点
search(road,0,targetSum,root);
return ans;
}
public void search(LinkedList<Integer> road,int sum,int target,TreeNode root){
if (root.left==null && root.right==null){//叶子节点
sum=sum+root.val;
if (sum==target) {
ans.add(new ArrayList<>(road));
return;
}
}
if (root.left!=null){
road.add(root.left.val);//左节点加入
search(road, sum+root.val, target, root.left);
road.removeLast();//将刚加入的左节点删除
}
if (root.right!=null){
road.add(root.right.val);
search(road, sum+root.val, target, root.right);
road.removeLast();
}
}
}