I wanted to get a review on an algorithm I wrote for a binary tree problem. The problem is the following.
Return the maximum sum between all branches in a binary tree. A branch is defined as all paths from root to leaf.
class Node(object):
def __init__(self, value):
self.value = value
self.left = None
self.right = None
#branch one
root = Node(10)
second = Node(5)
root.left = second
third = Node(1)
second.left = third
fourth = Node(3)
third.left = fourth
tenth = Node(5)
third.right = tenth
fifth = Node(20)
root.right = fifth
sixth = Node(60)
fifth.left = sixth
seventh = Node(3)
fifth.right = seventh
nineth = Node(40)
seventh.right = nineth
def find_max_sum_of_binary_tree_path(root):
curr_list = []
curr_max = [0]
def binary_tree_recurse(node):
if node:
if not node.left and not node.right:
curr_list.append(node.value)
list_sum = sum(curr_list)
if list_sum > curr_max[0]:
curr_max[0] = list_sum
curr_list.pop()
curr_list.append(node.value)
binary_tree_recurse(node.left)
binary_tree_recurse(node.right)
curr_list.pop()
binary_tree_recurse(root)
return curr_max[0]
# 10
# / \
# 5 20
# / / \
# 1 60 3
# / \ \
# 3 5 40
find_max_sum_of_binary_tree_path(root) #should return 90 based on my tree
>90
I'd like to stick to a recursive approach, but open to suggestions on anything else. I am mostly concerned about time complexity and improving the performance of this function. Does anyone know what the current time complexity is?
left
in problem statement looks like a typo. Shouldn't it beleaf
? \$\endgroup\$leaf
as well. \$\endgroup\$