首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用递归检查树路径中是否存在sum

是指在给定一棵树和一个目标值sum的情况下,判断是否存在从根节点到叶子节点的路径,使得路径上所有节点值的总和等于sum。

递归是一种解决问题的方法,它通过将问题分解为更小的子问题来解决。对于树的问题,递归通常通过遍历树的节点并调用自身来实现。

对于这个问题,可以定义一个递归函数,该函数接受当前节点、当前路径的总和以及目标值sum作为参数。在每一步递归中,需要判断当前节点是否为空。若为空,则直接返回False。否则,将当前节点的值加到路径总和上,并判断当前节点是否为叶子节点。如果是叶子节点并且路径总和等于目标值sum,则返回True。否则,继续递归地遍历当前节点的左子节点和右子节点。

下面是一个示例代码:

代码语言:txt
复制
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表示树的高度。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券