一.题目
入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
二.分析
首先要对路径这一次定义有准确的了解,如题目所述,从根节点往下,到叶子节点所经过的节点,当然也包括根节点和叶子节点;
然后,由题目意思可以知道,要使 “二叉树中结点值的和为输入整数
(int target)
的路径”,那么在先序遍历的时候,从根节点开始,每遍历一个节点,就target-=target
,若遍历到根节点时候target==0
,那么就满足上诉要求; 思路清晰,开始敲代码;
三.代码
ArrayList<ArrayList<Integer>> pathList=new ArrayList<ArrayList<Integer>>();//用于存放符合要求的路径的列表
ArrayList<Integer> path=new ArrayList<Integer>();//用于存放路径
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
if(root==null)
return pathList;
path.add(root.val);
target-=root.val; //从根节点开始减,当减到叶子节点时,等于0时,说明这一条路径是符合题目要求的
//用于指明当前节点是否是叶子节点;
boolean isLeaf=root.left==null&&root.right==null;
//符合要求的路径条件
if(target==0&&isLeaf==true)
pathList.add(new ArrayList<Integer>(path));
pathList=FindPath(root.left,target);
pathList=FindPath(root.right,target);
path.remove(path.size()-1); //返回上一个节点,此时就要移除路径中的当前节点
return pathList;
}