二叉树中和为某一值的路径 java
题目描述
输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)。
代码1:
public class Solution {
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
if(root == null || root.val > target){
return list;
}
ArrayList<Integer> path = new ArrayList<Integer>();
findPath(root,target,list,path);
return list;
}
private void findPath(TreeNode root, int target, ArrayList<ArrayList<Integer>> list, ArrayList<Integer> path) {
//如果节点为空,或者值小于target此条路径清空
if(root == null || root.val > target){
path.clear();
}else if(root.val == target){//如果当前节点等于target且为叶子节点则直接将它添加到path中,否则这条路径清空
if(root.left == null && root.right==null) {
path.add(root.val);
list.add(path);
}else{
path.clear();
}
}else{ //当根节点的值小于target,则递归去寻找它的左右子树
path.add(root.val);
ArrayList<Integer> path2 = new ArrayList<Integer>();
path2.addAll(path);
target -= root.val;
findPath(root.left,target,list,path);
findPath(root.right,target,list,path2);
}
}
}
代码2: