题目描述(此题多看 有点难理解)
输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)
package new_offer;
/**
* 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。
* 路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
* (注意: 在返回值的list中,数组长度大的数组靠前)
* @author Sonya
*递归完成,判断某一节点是否为叶节点,在叶节点时,判断此路径是否符合要求 不符合要求则中断
*非叶节点时 对其左右子树进行递归上述判断。
*/
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 N24_RargetOfFindPath {
// ArrayList<Integer> list=new ArrayList<Integer>();
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
ArrayList<ArrayList<Integer>> paths=new ArrayList<ArrayList<Integer>>();
if (root==null) return paths;
find(paths,new ArrayList<Integer>(),root,target);
return paths;
}
public void find(ArrayList<ArrayList<Integer>> paths, ArrayList<Integer> path,TreeNode root,int target) {
path.add(root.val);
if(root.left==null&&root.right==null) {//是叶节点
if(root.val==target) {paths.add(path);}// 如果和满足要求 则将此路径添加到paths中
return;//不符合要求则返回
}
ArrayList path2=new ArrayList<Integer>();
path2.addAll(path);
if(root.left!=null)find(paths,path,root.left,target-root.val);
if(root.right!=null)find(paths,path2,root.right,target-root.val);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
转载于:https://www.cnblogs.com/kexiblog/p/11127021.html