I was trying to write a Python algorithm that would find the maximum sum for a path of integers in a binary tree. I thought that the easiest way to do this would be a recursive function, but this doesn't seem to work the way I intended. How could I revise this function so that it would find the absolute maximum path? I can confirm that building the tree is working fine so far because the height function I wrote for it worked as intended.
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 code:
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)