给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。
叶子节点 是指没有子节点的节点。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/path-sum
例:
输入:root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22
输出:true
解释:等于目标和的根节点到叶节点路径如上图所示。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/path-sum
解析:
用目标值直接和当前节点的值进行判断,相同且当前节点无子节点则返回True,像子节点继续判断时只需要减去当前节点的值即可,若目标值存在但判断节点无则返回false。最后使用“or”,即存在一个True(即一条路径存在即可)即可。
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def hasPathSum(self, root, targetSum):
"""
:type root: TreeNode
:type targetSum: int
:rtype: bool
"""
if not root: return False # 终止条件
if root.val == targetSum and not root.left and not root.right: return True # 成功条件
return self.hasPathSum(root.left, targetSum-root.val) or self.hasPathSum(root.right, targetSum-root.val) # 递归调用