题目:给定一个二叉树和一个值 sum,判断是否有从根节点到叶子节点的节点值之和等于 sum 的路径,
例如:
给出如下的二叉树, sum=22,
返回true,因为存在一条路径 5→4→11→2的节点值之和为 22
这题虽然是个简单题,但是还是记录一下,毕竟涉及到递归的一些思想。
首先这道题是判断是否存在,所以将是否存在定义为了一个全局变量,当变量的值变为 true 的时候,就说明存在了。
然后是使用 sum 来作为判断是否存在的标准,每到达一个节点,判断当前节点不为空的话,就 sum -= root.val ,剪完之后去判断当前的 sum 是否为 0 ,以及当前节点是不是叶子结点,是的话就说明存在,将全局变量的值变为 true 即可。
然后有个需要注意的点是,因为在整个过程中涉及到对 sum 的减操作,为了不影响其他的路径,需要在最后在加上 root.val ,便于返回时去遍历其他的路径。
完整代码如下:
boolean res = false;
public boolean hasPathSum (TreeNode root, int sum) {
// write code here
if(root==null){
return false;
}
isExist(root, sum);
return res;
}
public void isExist(TreeNode root,int sum) {
if(root==null){
return;
}
sum -= root.val;
if(sum==0&&root.left==null&&root.right==null){
res = true;
}
isExist(root.left, sum);
isExist(root.right, sum);
sum += root.val;
}