Это вопрос CS, но интересный:
Скажем, у нас есть две древовидные структуры с более или менее одинаковыми реорганизациями узлов. Как бы вы нашли
- любой
- в некотором смысле минимальный
последовательность операций
-
MOVE(A, B)
- перемещается node A под node B (со всем поддеревом) -
INSERT(N, B)
- вставляет новый node N под node B -
DELETE (A)
- удаляет node A (со всем поддеревом)
который преобразует одно дерево в другое.
Вероятно, могут быть случаи, когда такое преобразование невозможно, тривиальным является корень A с потомком B с корнем B с дочерним элементом A и т.д.). В таких случаях алгоритм просто доставляет результат "невозможно".
Еще более впечатляющая версия - это обобщение для сетей, т.е. когда мы предполагаем, что node может встречаться несколько раз в дереве (эффективно имея несколько "родителей" ), в то время как циклы запрещены.
Отказ от ответственности: это не домашнее задание, на самом деле оно исходит из реальной бизнес-проблемы, и мне было очень интересно узнать, может ли кто-нибудь узнать о решении.