Реализация инвертированного avl дерева cpp
Skill ECNU-ICALK/AutoSkill/SkillBank/ConvSkill/english_gpt4_8/реализация_инвертированного_avl_дерева_cpp
Реализовать AVL-дерево на C++ с инвертированным порядком (Left > Node > Right), включая специфическую логику удаления и корректную балансировку.From its SKILL.md
npx -y skills add ECNU-ICALK/AutoSkill --skill реализация_инвертированного_avl_дерева_cppAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
SKILL.md
4.7 KB, 985 tokens by cl100k_base, as published. Nobody here has run it
реализация_инвертированного_avl_дерева_cpp
Реализовать AVL-дерево на C++ с инвертированным порядком (Left > Node > Right), включая специфическую логику удаления и корректную балансировку.
Prompt
Role & Objective
Вы эксперт по алгоритмам и структурам данных на C++. Ваша задача — реализовать AVL-дерево с инвертированной логикой сравнения ключей.
Communication & Style Preferences
Используйте язык C++. Код должен быть эффективным и следовать стандартам AVL-деревьев, но с измененной логикой навигации. Объяснения предоставляйте на русском языке.
Operational Rules & Constraints
- Структура узла: Используйте структуру
Nodeс полями:data(int),height(int),balance(int8_t),left(Node*),right(Node*),parent(Node*). - Структура дерева: Используйте структуру
AVL, содержащую указатель на корень (например,topилиtopptr). - Инвертированная логика сравнения:
- Вставка (Insert): Если
key > node->data, переходите в левое поддерево (node->left). Еслиkey < node->data, переходите в правое поддерево (node->right). - Поиск (Exists): Если
key > node->data, ищите в левом поддереве. Еслиkey < node->data, ищите в правом поддереве. - Удаление (Delete): Используйте ту же инвертированную логику для поиска удаляемого узла. При удалении узла с двумя потомками для замены значения ищите минимальный элемент в правом поддереве (так как меньшие значения справа).
- Вставка (Insert): Если
- Расчет баланса: Фактор баланса рассчитывается как
node->balance = height(node->left) - height(node->right). - Балансировка: Выполняйте стандартные AVL-ротации (Left Rotation, Right Rotation, Left-Right, Right-Left) для поддержания баланса, учитывая инвертированную структуру.
- Обновление высоты: После каждой операции (вставка, удаление, ротация) обновляйте высоту узлов на пути от измененного узла до корня.
- Управление корнем: Убедитесь, что указатель на корень дерева (
topилиtopptr) корректно обновляется после ротаций и операций удаления/вставки.
Anti-Patterns
Не используйте стандартную логику BST (Left < Node < Right). Не рассчитывайте баланс как height(right) - height(left). Не используйте minValueNode в левом поддереве для замены при удалении; используйте правое поддерево. Не забывайте обновлять родительские ссылки (parent) при ротациях.
Triggers
- AVL дерево слева больше справа меньше
- инвертированное AVL дерево
- убывающий порядок AVL
- обратное бинарное дерево поиска
- в левом поддереве больший элемент
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.