Я хочу рассчитать коэффициент баланса узла в дереве avl без использования какой-либо рекурсивной процедуры. Как я могу это сделать? Пожалуйста, скажите мне метод или предоставите фрагмент кода на C++.Расчет коэффициента баланса узла в дереве avl
ответ
Вы можете сохранить коэффициент баланса как часть информации, которую сохраняет каждый узел. В частности, вы можете сохранить высоту левого и правого поддеревьев и обновить значения с каждой вставкой/удалением по пути вставки/удаления.
Пример:
class Node {
public:
// stuff...
int GetBF() { return lHeight - rHeight; }
private:
int data;
Node* right;
Node* left;
Node* parent; // optional...
int rHeight; // Height of the right subtree
int lHeight; // Height of the left subtree
};
Без рекурсии может быть немного сложнее, но вы можете сохранить высоту узла в каждом узле. Тогда вы можете получить сбалансированный коэффициент в постоянное время (разница между левым и правым высотами ребенка, если ребенок равен NULL, тогда высота равна 0).
Будет сложно обновить это число. Когда вы вставляете узел, вы должны обновлять все высоты на пути, но не каждый. Высота всегда равна max (высота левого ребенка, высота ребенка) + 1. Эта вставка является рекурсивной, и я не знаю, является ли это проблемой для вас. Также во время балансировки вы должны обновлять высоты и, возможно, снова с рекурсией.
Я надеюсь, что это вам поможет. Если нет, укажите проблему с рекурсией - время, память, ... и мы можем попытаться найти лучшее решение.
- 1. Пересчет коэффициента баланса в дереве AVL
- 2. Коэффициент баланса узлов в дереве AVL
- 3. Расчет коэффициента баланса для дерева AVL с переменными пределами - возможно?
- 4. Поиск узла с коэффициентом баланса -2 в дереве AVL
- 5. Что такое коэффициент баланса в дереве AVL
- 6. C++ - удаление узла в дереве AVL
- 7. Реализация родительского узла в дереве AVL
- 8. Устранение неполадок корневого узла в дереве AVL
- 9. Как идентифицировать нарушенный узел в дереве AVL?
- 10. Понимание факторов баланса/высоты узла для поворотов AVL
- 11. Losing ссылки в дереве AVL
- 12. Поиск медианы в дереве AVL
- 13. Расчет баланса с MySQL
- 14. Расчет баланса Oracle
- 15. Обработка дубликатов ключей в дереве AVL
- 16. Расчет коэффициента корреляции FFT
- 17. Расчет коэффициента кластеризации
- 18. Расчет коэффициента масштабирования iScroll
- 19. Расчет коэффициента корреляции
- 20. Pearson Расчет коэффициента массив
- 21. расчет коэффициента регрессии в python
- 22. установка родительского элемента на дереве AVL
- 23. Сохранение класса Author в дереве AVL
- 24. Найти следующий больший элемент в дереве AVL
- 25. Попытка реализовать поиск в дереве avl
- 26. Печать пути к листу в дереве AVL
- 27. глубина 2 листа в дереве AVL
- 28. Как найти повторяющиеся значения в дереве AVL
- 29. Найти узел в дереве AVL итеративно
- 30. Расчет баланса после каждой операции
Точка для вас, вы быстрее. Я писал свое решение слишком долго, но у нас есть такая же идея. Но я думаю, что в этом решении потребуется рекурсивное обновление во время вставки, и это может быть проблемой, потому что в требованиях «без рекурсии» – Gaim
@Gaim. В любом случае, вставка в дерево AVL должна проходить все узлы в путь вставки. Неважно, если вы пишете рекурсивную или итеративную функцию для этого (рекурсивный вариант будет проще реализовать). Эти узлы являются единственными, чей коэффициент баланса изменяется, поэтому тогда будут обновляться rHight и lHeight. Если у вас есть определенный узел - вычисление коэффициента баланса выполняется в O (1). – Anna