24. (*) Проверить, можно ли поменяв друг с другом значения всего лишь двух элементов в двоичном дереве привести его к двоичному дереву поиска. Если можно, выполнить такую замену. Подсказка: реализовать процедуру проверки дерева на соответствие двоичному дереву поиска. Также реализовать итератор по узлам дерева (в примерах к лекциям реализован итератор для значений в узлах, для узлов – элементарная модификация. Далее цикл в цикле с попыткой замены и проверкой, пока не получится (если получится). Оцените сложность такого алгоритма.
Проход по дереву от левого к правому краю. По мере прохождения накапливаются ошибки дерева, после прохода ошибки меняются местами. Дальше идет проверка нового дерево на BST