📅  最后修改于: 2023-12-03 14:58:23.985000             🧑  作者: Mango
有一棵二叉树,每个节点的值为正整数。现在给定一个正整数K,请编写一个函数判断是否存在一条从根节点开始往下走的路径,使得路径上的节点权值之和恰好等于K。
如下所示的二叉树,K为22。
5
/ \
4 8
/ / \
11 13 4
/ \
7 2
在这种情况下,存在一条从根节点开始往下走的路径(5->4->11->2),使得路径上的节点权值之和恰好等于22。因此,函数应该返回 true。
这是典型的深度优先搜索(DFS)问题。我们只需要从根节点开始,递归地计算所有从该节点出发的路径权值之和,并判断是否可以得到所需的权值。
例如,在上面的例子中,我们可以先检查根节点是否等于所需权值。如果不是,我们就递归地计算其左子树和右子树,看是否有一条路径权值之和等于所需权值 K。
def has_path_sum(root, sum):
"""
:type root: TreeNode
:type sum: int
:rtype: bool
"""
if not root:
return False
if not root.left and not root.right:
return sum == root.val
return has_path_sum(root.left, sum - root.val) or has_path_sum(root.right, sum - root.val)