Python程序:计算路径和为k的路径数量
假设我们有一棵二叉树和另一个值 k,我们需要找到从根节点到叶节点的、和为 k 的唯一路径的数量。
例如,如果输入是:
并且 k = 5,则输出为 2,因为路径为 [2, 3] 和 [1, 4]
为了解决这个问题,我们将遵循以下步骤:
- count := 一个字典,初始值为键 0,值为 1
- ans := 0,prefix := 0
- 定义一个函数 dfs()。它将接收节点作为参数。
- 如果节点不为空,则:
- prefix := prefix + 节点的值
- ans := ans + (count[prefix - target],如果不存在则为 0)
- count[prefix] := count[prefix] + 1
- dfs(节点的左子节点)
- dfs(节点的右子节点)
- count[prefix] := count[prefix] - 1
- prefix := prefix - 节点的值
- 在主方法中,执行以下操作:
- dfs(根节点)
- 返回 ans
让我们来看下面的实现,以便更好地理解:
示例
from collections import Counter class TreeNode: def __init__(self, data, left = None, right = None): self.val = data self.left = left self.right = right class Solution: def solve(self, root, target): count = Counter([0]) ans = prefix = 0 def dfs(node): nonlocal ans, prefix if node: prefix += node.val ans += count[prefix - target] count[prefix] += 1 dfs(node.left) dfs(node.right) count[prefix] -= 1 prefix -= node.val dfs(root) return ans ob = Solution() root = TreeNode(3) root.left = TreeNode(2) root.right = TreeNode(4) root.right.left = TreeNode(1) root.right.left.right = TreeNode(2) k = 5 print(ob.solve(root, k))
输入
root = TreeNode(3) root.left = TreeNode(2) root.right = TreeNode(4) root.right.left = TreeNode(1) root.right.left.right = TreeNode(2) 5
输出
2
广告