Я нашел интересную алгоритмическую задачу. Нам дано бинарное дерево, у которого значение 0 во всех вершинах, кроме листьев. В листьях у нас есть два варианта:
значение неизвестно, но известно, что это натуральное число >=1
значение известно и является натуральным числом >=1
Проблема состоит в том, чтобы решить, возможно ли установить каждое неизвестное значение в листьях таким образом, чтобы каждое поддерево данного дерева имело одинаковую сумму значений в вершинах в его левом и правом поддеревьях.
Например:
дерево1:
0
/ \
0 ?
/ \
0 5
/ \
? ?
Ответ НЕТ -, принимая во внимание, что каждый вопросительный знак должен быть натуральным числом, это, конечно, невозможно
дерево2:
0
/ \
0 0
/ \ / \
0 10 ? ?
/ \
5 ?
Ответ ДА -мы ставим :5, 10, 10 соответственно в каждом вопросительном знаке.
Уже,Я придумал только очевидный алгоритм -мы создаем систему линейных уравнений и проверяем, имеет ли она решение в натуральных числах. Но я думаю, что это может быть очень медленным для больших деревьев, и это должен быть лучший способ решить эту проблему. Кто-нибудь может помочь? Я был бы очень признателен.