//路径累加和

该博客介绍了一个Java程序,用于解决LeetCode上的路径总和问题。它定义了一个`Path`类,并提供了一个静态方法`hasPathSum`来检查二叉树中是否存在一条从根节点到叶节点的路径,其节点值之和等于给定的目标和。方法使用递归策略遍历树的节点,通过全局变量`isSum`记录是否存在满足条件的路径。
摘要由CSDN通过智能技术生成
//路径累加和
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);
        }
    }
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值