package PathSum;
import java.util.ArrayList;
import java.util.List;
/**
* @author 真他喵的学不动咯
* @create 2022-08-16--21:57
*/
public class pii { //路径累加和2
//https://leetcode.com/problems/path-sum-ii/
public static class TreeNode{
public int val;
public TreeNode left;
public TreeNode right;
TreeNode(int val){
this.val=val;
}
}
public static List<List<Integer>> path(TreeNode root,int sum){ //List<List<Integer>> ,路径套路径就是所有路径
//边界条件
List<List<Integer>> ans=new ArrayList<>(); //路径的路径
if (root==null){ //树为空,则没有叶结点
return ans;
}
ArrayList<Integer> path=new ArrayList<>();
process(root,path,0,sum, ans);
return ans;
}
//List<Integer> 路径
public static void process(TreeNode x,List<Integer> path,int preSum,int sum,List<List<Integer>> ans){
//x是叶节点
if (x.left==null&&x.right==null) {
if (preSum + x.val == sum) {
path.add(x.val);
ans.add(copy(path));//把复制3后的path加入
path.remove(path.size() - 1); //把移除最后一个元素,返回上层节点,向新的方向进行preSum
}
return; //返回上层结点
}
//x不是叶节点
//先把自己的值加进去,因为要往下算结点
path.add(x.val);
preSum+=x.val;
if (x.left!=null){ //左不为空,调左边
process(x.left,path,preSum,sum,ans);
}
if (x.right!=null){ //右不为空,调右边
process(x.right,path,preSum,sum,ans);
}
//把自己的删掉,因为要返回上结点
path.remove(path.size()-1);
}
//copy方法
public static List<Integer> copy(List<Integer> path){
List<Integer> ans=new ArrayList<>();
for (Integer num:path){
ans.add(num);
}
return ans;
}
//路径累加和2
最新推荐文章于 2024-09-01 11:38:54 发布