สมมติว่าเรามีต้นไม้ทวิภาค ต้องหาผลรวมซับทรี (subtree sum) ที่พบบ่อยที่สุด ผลรวมซับทรีของโหนดคือผลรวมค่าทั้งหมดใต้โหนดนั้นรวมตัวมันด้วย
ตัวอย่าง: จากภาพ ผลลัพธ์คือ 3 เพราะเกิดขึ้น 2 ครั้ง (โหนดใบซ้าย และผลรวม 3 - 6 + 6)
ขั้นตอนการแก้ปัญหา
count = defaultdict(int)- ฟังก์ชัน
getSum(node):- ถ้า
nodeเป็น None: คืนค่า 0 mySum = getSum(node.left) + getSum(node.right) + node.valcount[mySum] += 1- คืนค่า
mySum
- ถ้า
- จากเมธอดหลัก เรียก
getSum(root) - คืนค่า
max(count, key=count.get)
ตัวอย่างโค้ด Python
from collections import defaultdict
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):
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)) # Output: 3
อินพุต / เอาต์พุต
Input: ต้นไม้ตามโค้ดตัวอย่าง
Output: 3