Giả sử chúng ta có một cây nhị phân, chúng ta phải tìm tổng của cây con thường xuyên nhất. Tổng cây con của một nút thực sự là tổng của tất cả các giá trị trong một nút, bao gồm cả chính nút đó.
Vì vậy, nếu đầu vào giống như
thì đầu ra sẽ là 3 vì nó xuất hiện hai lần - một lần ở lá bên trái và một lần là tổng của 3 - 6 + 6.
Để 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 đồ trống
- Xác định một hàm getSum (). Điều này sẽ lấy nút
- nếu nút là null, thì
- trả về 0
- mySum:=getSum (bên trái của nút) + getSum (bên phải của nút) + giá trị của nút
- count [mySum]:=count [mySum] + 1
- trả lại mySum
- Từ phương thức chính, hãy làm như sau
- getSum (gốc)
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 defaultdictclass 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):count =defaultdict (int) def getSum (node):if not node:return 0 mySum =getSum (node.left) + getSum (node.right) + node.val count [mySum] + =1 return mySum getSum (root) return max (count, key =count.get) ob =Solution () root =TreeNode (-6) root.left =TreeNode (3) root.right =TreeNode (6) print (ob.solve (root))Đầu vào
root =TreeNode (-6) root.left =TreeNode (3) root.right =TreeNode (6)Đầu ra
3