题目描述:输入一个值,和一个二叉树的根节点,输出所有可能的路径,这条路径需要满足从根节点到叶子节点的节点值的和等于输入的那个值。
思路: 递归,将target减去输入的值,然后新得到的值和左子树右子树,又分别是两个子问题,以此递归。
首先定义两个全局的ArrayList,一个存放当前的路径的path,一个存放符合要求的路径res。
先判断root是不是null,如果是就返回res。
之后将当前根节点的值放入path中,再将target减去根节点值赋给target,判断target是不是等于0,且此时的根节点是叶子节点,若符合,则说明是一条符合要求的路径。
这时候创建一个新的ArrayList,参数用path初始化,然后添加到res中去。
若不符合,则下一步就遍历根节点的左子树和右子树
最后再将当前的根节点的值从path中remove掉,最后返回res跳回上层节点。
java程序:
import java.util.ArrayList;
/**
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>>();
ArrayList<Integer> path = new ArrayList<Integer>();
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
if(root == null)
return res;
target = target - root.val;
path.add(root.val);
if(target==0&&root.left==null&&root.right==null){
res.add(new ArrayList<Integer>(path));
}
FindPath(root.left,target);
FindPath(root.right,target);
path.remove(path.size()-1);
return res;
}
}