Я пытался написать алгоритм Python, который бы нашел максимальную сумму для пути целых чисел в двоичном дереве. Я думал, что самым простым способом сделать это будет рекурсивная функция, но, похоже, это не работает так, как я хотел. Как я мог бы пересмотреть эту функцию, чтобы она нашла абсолютный максимальный путь? Я могу подтвердить, что построение дерева пока работает нормально, потому что функция высоты, которую я написал для него, работала так, как задумано.
class Node:
def __init__(self, data):
self.right = self.left = None
self.data = data
class Solution:
def insert(self, root, data):
if not root:
return Node(data)
else:
if data<=root.data:
cur=self.insert(root.left, data)
root.left=cur
else:
cur=self.insert(root.right, data)
root.right=cur
return root
def get_height(self, root):
if not root or root.left == root.right == None:
return 0
return 1 + max(self.get_height(root.left), self.get_height(root.right))
def get_max_sum(self, root):
if not root:
return 0
return root.data + max(self.get_max_sum(root.left), self.get_max_sum(root.right))
Код IO:
nums = '''75
95 64
17 47 82
18 35 87 10
20 04 82 47 65
19 01 23 75 03 34
88 02 77 73 07 63 67
99 65 04 28 06 16 70 92
41 41 26 56 83 40 80 70 33
41 48 72 33 47 32 37 16 94 29
53 71 44 65 25 43 91 52 97 51 14
70 11 33 28 77 73 17 78 39 68 17 57
91 71 52 38 17 14 91 43 58 50 27 29 48
63 66 04 68 89 53 67 30 73 16 69 87 40 31
04 62 98 27 23 09 70 98 73 93 38 53 60 04 23'''.replace('\n', ' ')
nums = tuple(map(int, nums.split(' ')))
tree = Solution()
root = None
for i in nums:
data = i
root = tree.insert(root, data)
height = tree.get_height(root)
msum = tree.get_max_sum(root)
print(height, msum)