题目地址:路径总和
解题思路
本文解题思路来自左程云老师算法课新手班第七节
每一条路径都是最后到达尾部节点,也就是这个节点的左右都为空,这时,sum和累加值相同才是true
在方法体外,设置一个静态变量isSum,初始值弄为false。
process方法需要三个参数,一个为节点,一个为已经累加的preSum,一个为要求的Sum 。
在process方法内改变这个isSum。
if (x.left==null&&x.right==null){
if (preSum+x.val==sum){
isSum = true;
}
return;
}
然后去维护preSum,
preSum+= x.val;
去递归
if(x.left!=null){
process(x.left, preSum, sum);
}
if (x.right != null) {
process(x.right, preSum, sum);
}
接下来是要写要调用的那个函数,边界判断一下就ok
public static boolean hasPathSum(TreeNode root, int targetSum) {
if (root == null) {
return false;
}
isSum = false;
process(root,0,targetSum);
return isSum;
}
完整代码
public boolean hasPathSum(TreeNode root, int targetSum) {
if (root == null) {
return false;
}
isSum = false;
process(root,0,targetSum);
return isSum;
}
public static boolean isSum = false;
public static void process(TreeNode x,int preSum,int sum){
if (x.left==null&&x.right==null){
if (preSum+x.val==sum){
isSum = true;
}
return;
}
preSum+= x.val;
if(x.left!=null){
process(x.left, preSum, sum);
}
if (x.right != null) {
process(x.right, preSum, sum);
}
}
需要注意的问题
在 hasPathSum函数内的这句话必不可少
isSum = false;
在leetCode判题中,静态变量并不会每次都更新为初始值,需要手动更新,
假如上一题isSum变为了 true,在这题中isSum的初始值还是true,假如这题答案为false,也就是isSum不存在变化,因为没有初始化,那么最后还是true,判题出现错误。
不知道算是bug还是啥,反正自己注意一下。