0
点赞
收藏
分享

微信扫一扫

【树6】二叉树中和为某一值的路径


题目描述


输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。


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 {
public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
ArrayList<ArrayList<Integer>> pathList=new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> nodeList=new ArrayList<Integer>();
if(root==null ||target<0)
return pathList;
int curSum=0;
return FindPathCore(root,target,pathList,nodeList,curSum);
}
private ArrayList<ArrayList<Integer>> FindPathCore(TreeNode root,int target,
ArrayList<ArrayList<Integer>> pathList,ArrayList<Integer> nodeList,int curSum){
curSum+=root.val;
nodeList.add(root.val);

boolean isLeaf=(root.left==null) && (root.right==null);
if(isLeaf && curSum==target){
//初始化
ArrayList<Integer> tempList=new ArrayList<Integer>();
//遍历完一条符合条件的路径就将其值加入tempList,再加入到pathList
for(Integer i:nodeList){
tempList.add(i);
}
pathList.add(tempList);
}
if(root.left!=null)
FindPathCore(root.left,target,pathList,nodeList,curSum);
if(root.right!=null)
FindPathCore(root.right,target,pathList,nodeList,curSum);
//遍历完一条路径后要删除叶结点返回到叶结点的根结点
Integer val=nodeList.remove(nodeList.size()-1);
curSum-=val;

return pathList;
}












}



举报

相关推荐

0 条评论