Максимальная сумма путей между двумя конечными узлами (GeeksForGeeks)Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Максимальная сумма путей между двумя конечными узлами (GeeksForGeeks)

Сообщение Anonymous »

Дано двоичное дерево, в котором каждый элемент узла содержит число. Найдите максимально возможную сумму от одного листового узла до другого.
Пример 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
Может кто-нибудь сказать мне, почему мы используем return max(ls+root.data,rs+root.data). И если мы используем return max(ls+root.data,rs+root.data) для проверки максимального значения, то почему мы используем res=max(res,ls+rs+root.data), а не просто res = max(ls+root.data,rs+root.data).
РЕДАКТИРОВАТЬ:
Например:

Код: Выделить всё

Let's take this tree for example:

10
/   \
8      2
/  \
3     5
При этом после рекурсивных вызовов ls становится равным 3, а rs становится равным 5. становится ls+rs+root.data, что равно 3+5+8 = 16.
Затем верните max(ls+root.data,rs+root.data) то есть max(11,13) = 13.
Теперь, по моему мнению, после этого функция должна просто вернуть 13, но этого не происходит. Несмотря на то, что return не является рекурсивным оператором. Как происходит поток управления кодом?

Подробнее здесь: https://stackoverflow.com/questions/646 ... ksforgeeks
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Какой в ​​Python самый быстрый способ найти количество путей между узлами графа?
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Онлайн-судья GeeksForGeeks | Питон3 | Рекурсия: ошибка сегментации (SIGSEGV)
    Anonymous » » в форуме Python
    0 Ответы
    41 Просмотры
    Последнее сообщение Anonymous
  • Удаление связанного списка и его печать (Geeksforgeeks)
    Anonymous » » в форуме Python
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Максимальная сумма матрицы, подматрицы
    Anonymous » » в форуме C++
    0 Ответы
    29 Просмотры
    Последнее сообщение Anonymous
  • Максимальная сумма без пропуска двух смежных элементов
    Anonymous » » в форуме JAVA
    0 Ответы
    39 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»