📜  BST 中的目标总和对 (1)

📅  最后修改于: 2023-12-03 14:59:34.984000             🧑  作者: Mango

BST 中的目标总和

二叉搜索树(BST)中的目标总和是指在BST中找到所有从根节点到叶节点的路径,这些路径上的节点值之和等于给定目标值的路径数量。

例如,假设我们有一个BST如下所示:

      10
     /  \
    5    15
   / \     \
  3   7     18

如果目标总和为17,那么在这个BST中有两个路径的节点值之和等于17:

  • 10 -> 5 -> 2
  • 10 -> 7

我们可以使用深度优先遍历(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中的目标总和的介绍和示例代码。