В настоящее время я работаю над структурой данных Tree в python. В данный момент я пытаюсь вычислить значения поддерева, где значение поддерева равно наибольшему значению узла в поддереве данного узла. Например, для данного дерева:
A(5)
/ \
C(2) D(8)
|
B(10)
Значение поддерева C будет равно 10, значение поддерева A будет равно 10, а значение поддерева D будет равно 8 et c. У меня есть следующий код для распространения значения поддерева вверх по дереву (так как каждый узел имеет элемент "subtree_value"), но я не могу улучшить свой алгоритм. Первоначально я использовал рекурсию, а затем переключился на вложенные циклы, так как я не очень опытен в рекурсии. Тем не менее, есть ли способ, которым я могу сделать это без необходимости вложенного l oop?
node = subtree_a
while node.parent != None: #iterates up the list until it reaches the root node
children = node.parent.children
for child in children:
if (child.subtree_value > node.parent.subtree_value): #updates subtree value of parent based on largest child key
node.parent.set_subtree_val(child.subtree_value)
node = node.parent