Пример 1:
Код: Выделить всё
Input :
3
/ \
4 5
/ \
-10 4
Output: 16
Максимальная сумма находится между листовыми узлами 4 и 5.
4 + 4 + 3 + 5 = 16.
Пример 2:
Код: Выделить всё
Input :
-15
/ \
5 6
/ \ / \
-8 1 3 9
/ \ \
2 -3 0
/ \
4 -1
/
10
Output : 27
Максимально возможная сумма от одного листового узла
до другого равна (3 + 6 + 9 + 0 + -1 + 10 = 27)
Объяснение:
Максимально возможная сумма от одного листового узла
до другого равна (3 + 6 + 9 + 0 + -1 + 10 = 27)
p>
Это решение:
Код: Выделить всё
'''
# Node Class:
class Node:
def _init_(self,val):
self.data = val
self.left = None
self.right = None
'''
res = -999999999
def maxPathSumUtil(root):
global res
if root is None:
return 0
if root.left is None and root.right is None:
return root.data
ls=maxPathSumUtil(root.left)
rs=maxPathSumUtil(root.right)
if root.left and root.right:
res=max(res,ls+rs+root.data)
return max(ls+root.data,rs+root.data) #Line: Problem
if root.left is None:
return rs+root.data
else:
return ls+root.data
def maxPathSum(root):
global res
res = -999999999
maxPathSumUtil(root)
return res
РЕДАКТИРОВАТЬ:
Например:
Код: Выделить всё
Let's take this tree for example:
10
/ \
8 2
/ \
3 5
Код: Выделить всё
res
Затем верните max(ls+root.data,rs+root.data) то есть max(11,13) = 13.
Теперь, по моему мнению, после этого функция должна просто вернуть 13, но этого не происходит. Несмотря на то, что return не является рекурсивным оператором. Как происходит поток управления кодом?
Подробнее здесь: https://stackoverflow.com/questions/646 ... ksforgeeks