//路径累加和
package PathSum;
/**
* @author 真他喵的学不动咯
* @create 2022-08-16--21:26
*/
public class Path { //路径累加和
//https://leetcode.com/problems/path-sum/
//路径:必须头结点开始,叶节点结束
public static class TreeNode{
public int val;
public TreeNode left;
public TreeNode right;
TreeNode(int val){
this.val=val;
}
}
public static boolean isSum=false; //全局变量的方法
public static boolean hasPathSum(TreeNode root,int sum){
if (root==null){ //没到根节点就不是路径,那就不求和
return false;
}
isSum=false; //每次都把它变成了false,重新判断
process(root,0,sum); //找是否有路径能够达到要求的和
return isSum;
}
public static void process(TreeNode x,int preSum,int sum){ //preSum是之前的累加和 ,sum是要求的累加和,x是树
if (x.left==null&&x.right==null){ //如果x的左和右都是null,那就是叶节点;只有一面是null,就未必是叶节点
//这条路径是不是能凑出要求的sum
if (x.val+preSum==sum){ //x.val+preSum就是当前元素+之前的累加和
isSum=true; //isSum表示是不是能凑出这个和sum,isSum是true和false
}
return;
}
//x是非叶节点
preSum=preSum+x.val; //加入前缀和
if (x.left!=null){ //左不空给左传,向有叶节点的方向传
process(x.left,preSum,sum);
}
if (x.right!=null){ //右不空给右传,右边有叶节点
process(x.right,preSum,sum);
}
}
}