📌  相关文章
📜  根到叶路径总和等于给定数字(1)

📅  最后修改于: 2023-12-03 15:40:27.783000             🧑  作者: Mango

根到叶路径总和等于给定数字

在二叉树中,从根节点到叶子节点的一条路径上的所有节点值之和为这条路径的和。要求编写一个函数,判断是否存在根到叶路径的和等于给定数字。

实现思路

对二叉树进行深度优先遍历,记录当前路径的和。当遍历到叶子节点时,判断当前路径的和是否等于给定数字。如果等于,返回 True,否则继续遍历其他路径。

代码实现
class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

def hasPathSum(root: TreeNode, targetSum: int) -> bool:
    if not root:
        return False

    def dfs(node, cur_sum):
        if not node.left and not node.right:
            return cur_sum + node.val == targetSum
        res = False
        if node.left:
            res = res or dfs(node.left, cur_sum + node.val)
        if node.right:
            res = res or dfs(node.right, cur_sum + node.val)
        return res

    return dfs(root, 0)

以上代码实现了二叉树中是否存在根到叶路径的和等于给定数字的功能。

时间复杂度

上述算法需要遍历整个二叉树才能得出答案,因此时间复杂度为 $O(n)$,其中 $n$ 为节点个数。同时,递归栈的最大深度为二叉树的高度,因此空间复杂度最大为 $O(h)$,其中 $h$ 为二叉树的高度。