// 定义一个名为 Solution 的类
class Solution {
// 定义一个名为 hasPathSum 的公共方法,接收一个 TreeNode 类型的根节点 root 和一个整数 targetSum 作为参数
// 方法返回一个布尔值,表示从根节点开始是否存在一条路径,使得路径上所有节点的值之和等于给定的目标值 targetSum
public boolean hasPathSum(TreeNode root, int targetSum) {
// 基本终止条件:如果根节点为空,那么不存在这样的路径,直接返回 false
if(root == null){
return false;
}
// 更新目标值:从当前节点的值中减去目标和
targetSum -= root.val;
// 特殊情况:如果当前节点是一个叶子节点(即左右子节点都为空),则检查此时的目标值是否为 0,
// 若为 0,说明找到了一条从根节点到叶子节点、路径和为目标值的路径,返回 true
if(root.left == null && root.right == null){
return targetSum == 0;
}
// 递归遍历左子树
if(root.left != null){
// 调用自身方法查找左子树中是否存在满足条件的路径
boolean left = hasPathSum(root.left, targetSum);
// 如果在左子树中找到了满足条件的路径,则直接返回 true
if(left){
return true;
}
}
// 递归遍历右子树
if(root.right != null){
// 调用自身方法查找右子树中是否存在满足条件的路径
boolean right = hasPathSum(root.right, targetSum);
// 如果在右子树中找到了满足条件的路径,则直接返回 true
if(right){
return true;
}
}
// 如果左右子树都没有找到满足条件的路径,则返回 false
return false;
}
}
这个方法采用递归的方式遍历二叉树,对每一个节点,首先检查它是否为叶子节点(左右子节点均为空),如果是且路径和恰好等于目标值,就返回 true;否则,分别递归地在其左子树和右子树中查找是否存在满足条件的路径。最后,如果在左右子树中都没有找到满足条件的路径,则返回 false。