📅  最后修改于: 2023-12-03 14:59:34.984000             🧑  作者: Mango
二叉搜索树(BST)中的目标总和是指在BST中找到所有从根节点到叶节点的路径,这些路径上的节点值之和等于给定目标值的路径数量。
例如,假设我们有一个BST如下所示:
10
/ \
5 15
/ \ \
3 7 18
如果目标总和为17,那么在这个BST中有两个路径的节点值之和等于17:
我们可以使用深度优先遍历(DFS)来解决此问题。对于每个节点,我们可以将其值添加到当前路径中,并检查该路径是否等于目标sum。如果是,则将当前路径计数器加1。然后我们递归地在左右子树中查找,直到达到叶节点并结束递归。
以下是BST目标总和的示例代码:
class Solution:
def pathSum(self, root: TreeNode, sum: int) -> int:
self.count = 0
def dfs(node, curr_sum):
if not node:
return
curr_sum += node.val
if curr_sum == sum:
self.count += 1
self.count += prefix[curr_sum - sum]
prefix[curr_sum] += 1
dfs(node.left, curr_sum)
dfs(node.right, curr_sum)
prefix[curr_sum] -= 1
prefix = defaultdict(int)
dfs(root, 0)
return self.count
上述代码中的dfs函数接收当前节点和当前路径的累积和,并在节点的值上添加它。如果当前sum等于目标值,则计数器计数器加1。我们还在字典中更新前缀和的出现次数,以便在未来找到匹配的路径。
最后,我们可以在BST中调用pathSum方法并传递根节点和目标值,该方法将返回节点值之和等于目标值的路径数量。
代码片段使用了python语言,返回了markdown格式,其中包括了BST中的目标总和的介绍和示例代码。