Я реализую деревья AVL на C++ в своем собственном коде, но эта проблема больше связана с пониманием деревьев AVL, чем с самим кодом. Извините, если здесь не поместилось, но я перерыл весь интернет и так и не нашел решения своей проблемы.
Мой код работает, как и ожидалось, с относительно небольшими входными данными (~ 25-30 цифр), поэтому я полагаю, что он должен работать и для большего количества. Я использую массив, в котором я храню узлы, которые я посетил во время вставки, а затем, используя цикл while, я увеличиваю высоту каждого узла, когда это необходимо, я знаю, что эта процедура должна закончиться, когда я найти узел, высоты которого равны (то есть результат их вычитания равен 0).
Проблема в балансировке. Хотя я могу найти Коэффициент баланса каждого узла и правильно сбалансировать дерево, я не уверен, следует ли мне прекратить регулировку высоты после балансировки и просто завершить цикл вставки или продолжить идет до тех пор, пока не подразумевается условие, и я просто не могу понять это сейчас. Я знаю, что во время удаления узла и повторной балансировки дерева я должен продолжать проверять, но я не уверен насчет вставки и балансировки.
Кто-нибудь может дать какое-либо представление об этом и, возможно, какую-то документацию?