Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình đếm số đường dẫn có tổng là k trong python

Giả sử chúng ta có một cây nhị phân và một giá trị khác k, chúng ta phải tìm số nút duy nhất đến các đường dẫn con con ở đó mà tổng bằng k.

Vì vậy, nếu đầu vào giống như

Chương trình đếm số đường dẫn có tổng là k trong python

và k =5, thì đầu ra sẽ là 2, vì các đường dẫn là [2, 3] và [1, 4]

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • count:=một bản đồ ban đầu giữ giá trị 1 cho khóa 0
  • ans:=0, tiền tố:=0
  • Định nghĩa một hàm dfs (). Điều này sẽ lấy nút
  • nếu nút không rỗng, thì
    • prefix:=tiền tố + giá trị của nút
    • ans:=ans + (count [prefix - target], nếu không có thì nó sẽ là 0)
    • count [prefix]:=count [prefix] + 1
    • dfs (bên trái của nút)
    • dfs (bên phải của nút)
    • count [prefix]:=count [prefix] - 1
    • prefix:=prefix - giá trị của nút
  • Từ phương pháp chính, hãy thực hiện như sau
  • dfs (gốc)
  • trả lại ans

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

 from collection import Counterclass TreeNode:def __init __ (self, data, left =None, right =None):self.val =data self.left =left self.right =rightclass Giải pháp:def giải (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 =5print (ob.solve (root, k)) 

Đầu vào

 root =TreeNode (3) root.left =TreeNode (2) root.right =TreeNode (4) root.right.left =TreeNode (1) root.right.left.right =TreeNode (2) 5  

Đầu ra

 2