Сбалансированные суммы в бинарном дереве

Я нашел интересную алгоритмическую задачу. Нам дано бинарное дерево, у которого значение 0 во всех вершинах, кроме листьев. В листьях у нас есть два варианта:

  1. значение неизвестно, но известно, что это натуральное число >=1

  2. значение известно и является натуральным числом >=1

Проблема состоит в том, чтобы решить, возможно ли установить каждое неизвестное значение в листьях таким образом, чтобы каждое поддерево данного дерева имело одинаковую сумму значений в вершинах в его левом и правом поддеревьях.

Например:

дерево1:

      0
     / \
    0   ?
   / \
  0   5
 / \
?   ?

Ответ НЕТ -, принимая во внимание, что каждый вопросительный знак должен быть натуральным числом, это, конечно, невозможно

дерево2:

        0
     /     \
    0      0
   / \    / \
  0   10 ?   ?
 / \
5   ?

Ответ ДА ​​-мы ставим :5, 10, 10 соответственно в каждом вопросительном знаке.

Уже,Я придумал только очевидный алгоритм -мы создаем систему линейных уравнений и проверяем, имеет ли она решение в натуральных числах. Но я думаю, что это может быть очень медленным для больших деревьев, и это должен быть лучший способ решить эту проблему. Кто-нибудь может помочь? Я был бы очень признателен.

5
задан Toon Krijthe 21 July 2012 в 22:56
поделиться