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