是指在给定一棵树和一个目标值sum的情况下,判断是否存在从根节点到叶子节点的路径,使得路径上所有节点值的总和等于sum。
递归是一种解决问题的方法,它通过将问题分解为更小的子问题来解决。对于树的问题,递归通常通过遍历树的节点并调用自身来实现。
对于这个问题,可以定义一个递归函数,该函数接受当前节点、当前路径的总和以及目标值sum作为参数。在每一步递归中,需要判断当前节点是否为空。若为空,则直接返回False。否则,将当前节点的值加到路径总和上,并判断当前节点是否为叶子节点。如果是叶子节点并且路径总和等于目标值sum,则返回True。否则,继续递归地遍历当前节点的左子节点和右子节点。
下面是一个示例代码:
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def hasPathSum(root, targetSum):
if root is None:
return False
targetSum -= root.val
if root.left is None and root.right is None:
return targetSum == 0
return hasPathSum(root.left, targetSum) or hasPathSum(root.right, targetSum)
这段代码定义了一个TreeNode类用于表示树的节点,其中包含值以及左右子节点的引用。函数hasPathSum接受根节点和目标值作为参数,并返回一个布尔值,表示是否存在从根节点到叶子节点的路径,使得路径上所有节点值的总和等于目标值。
该函数首先检查根节点是否为空,若为空则直接返回False。然后,将目标值减去当前节点的值。如果当前节点为叶子节点并且目标值等于0,则返回True。否则,递归地遍历当前节点的左子节点和右子节点,将目标值作为新的参数传递给递归函数。
这种递归的时间复杂度为O(N),其中N表示树中节点的数量。空间复杂度为O(H),其中H表示树的高度。
领取专属 10元无门槛券
手把手带您无忧上云