前序遍历二叉树,用list集合存储所经过的节点值
将当前节点值加入list,判断从根节点到当前节点和目标和的大小关系
1.大于或者此节点为null,返回。否则将当前节点加入list
2.等于,判断是否已经是叶子节点,是将当前集合加入结果集,
3.小于,继续去找当前节点的左右子节点进行判断
4.从list删除当前节点,返回,
public class Solution {
public ArrayList<ArrayList<Integer>> res=new ArrayList();
public ArrayList<Integer> list=new ArrayList();
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
dfs(root,target);
return res;
}
public void dfs(TreeNode root,int target){
//(1)
if(root==null||target-root.val<0){
return;
}
list.add(root.val);//加入当前节点值
if(target-root.val==0&&root.left==null&&root.right==null){
res.add(new ArrayList(list)); //(2)加入结果集
}
//递归(3)
dfs(root.left,target-root.val);
dfs(root.right,target-root.val);
list.remove(list.size()-1); //(4)回溯
}
}


京公网安备 11010502036488号