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

更新于:2020年12月2日

浏览量:140

开启你的职业生涯

完成课程获得认证

开始学习
广告