题目描述:
输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)
思路分析:
这道题为二叉树的问题,首先想到的也是递归思想,要求的是和为target的所有路径,那么我们就从根开始先序遍历二叉树,遍历到一个节点,target减去该节点的值,知道target为0,且遍历到的当前节点为叶子节点,那么就找到了一跳路径,然后进行回溯,找下一条路径,按照先序遍历的过程进行查找,最终找到所有的路径。
代码:
/**
public class TreeNode{
int val=0;
TreeNode left=null;
TreeNode right=null;
public TreeNode(int val){
this val=val;
}
}
*/
public class Solution{
ArrayList<ArrayList<Integer>>res=new ArrayList<>();
ArrayList<Integer>list=new ArrayList<>();
public ArrayList<ArrayList<Integer>>FindTargetSum(TreeNode root,int target){
if(root==null)
return res;
list.add(root.val);
target=target-root.val;
if(target==0&&root.left==null&&root.right==null){
res.add(new ArrayList<Integer>(list)); //找到一条路径
}
FindTargetSum(root.left,target);
FindTargetSum(root.right,target);
list.remove(list.size()-1);
return res;
}
}