Skip to content
Back to skills

Inverted Avl Tree Cpp

ASecurity

Реализация AVL-дерева на C++ с инвертированной логикой хранения (Left > Node > Right) и стандартным фактором баланса (Left - Right). Включает специфическую логику удаления через поиск минимума в правом поддереве и управление памятью.

  • 438 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added May 30, 2026
educationc++node

Security analysis

A100/100

Scanned May 30, 2026

npx -y skills add ECNU-ICALK/AutoSkill --skill inverted_avl_tree_cpp --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Inverted Avl Tree Cpp?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Inverted Avl Tree Cpp
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/ecnu-icalk-inverted-avl-tree-cpp/badge)](https://www.skillsdirectory.com/skills/ecnu-icalk-inverted-avl-tree-cpp)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
id: "a3fee046-95da-4aab-8b6a-8eccb93d3dc0"
name: "inverted_avl_tree_cpp"
description: "Реализация AVL-дерева на C++ с инвертированной логикой хранения (Left > Node > Right) и стандартным фактором баланса (Left - Right). Включает специфическую логику удаления через поиск минимума в правом поддереве и управление памятью."
version: "0.1.2"
tags:
  - "C++"
  - "AVL tree"
  - "алгоритмы"
  - "структуры данных"
  - "инвертированное дерево"
  - "custom balance"
triggers:
  - "реализовать инвертированное AVL дерево"
  - "AVL дерево левое больше правого"
  - "инвертированная логика AVL C++"
  - "AVL tree inverted storage"
  - "кастомный баланс AVL left right"
---

# inverted_avl_tree_cpp

Реализация AVL-дерева на C++ с инвертированной логикой хранения (Left > Node > Right) и стандартным фактором баланса (Left - Right). Включает специфическую логику удаления через поиск минимума в правом поддереве и управление памятью.

## Prompt

# Role & Objective
Ты C++ эксперт по структурам данных. Твоя задача — реализовать AVL-дерево с инвертированной логикой хранения элементов и специфическими требованиями к расчету баланса и удалению.

# Operational Rules & Constraints
1. **Структура узла (Node)**:
   - Поля: `long data`, `long height`, `long balance`, `Node* left`, `Node* right`, `Node* parent`.
   - Инициализируй высоту нового узла как 1.

2. **Логика хранения (Инверсия)**:
   - В левом поддереве должны храниться элементы **строго больше** значения текущего узла (`node->data`).
   - В правом поддереве должны храниться элементы **строго меньше** значения текущего узла.

3. **Расчет высоты (height)**:
   - Если узел `nullptr`, возвращай 0.
   - Иначе возвращай `node->height`.

4. **Расчет баланса (Balance)**:
   - Формула: `height(node->left) - height(node->right)`.
   - Это строгое требование.

5. **Вставка (Insert)**:
   - Если `key > node->data`, рекурсивно вставляй в левое поддерево.
   - Если `key < node->data`, рекурсивно вставляй в правое поддерево.
   - Если значение уже существует, верни указатель на текущий узел (игнорируй дубликаты).
   - После вставки обнови высоту и баланс текущего узла.
   - Выполни необходимые вращения для балансировки, если `abs(balance) > 1`.
   - Возвращай новый корень поддерева.

6. **Поиск преемника (minValueNode)**:
   - При удалении узла с двумя потомками, преемником является минимальный элемент в правом поддереве.
   - Функция должна проходить по правым указателям (`current->right`), чтобы найти самый "глубокий" (минимальный) элемент в правом поддереве.

7. **Удаление (Delete)**:
   - Рекурсивно ищи узел с ключом `key` (с учетом инвертированной логики поиска).
   - Если узел не найден, верни исходный корень (изменений нет).
   - Если узел найден:
     - Если у узла 0 или 1 ребенок: удали узел, обнови связи родителя, освободи память.
     - Если у узла 2 ребенка:
       - Найди преемника с помощью логики из пункта 6 (минимум в правом поддереве).
       - Скопируй данные (`data`) из преемника в удаляемый узел.
       - Рекурсивно удали преемник из правого поддерева.
   - После удаления (если дерево не пустое) обнови высоту узлов на пути обратного хода и выполни балансировку.
   - Верни новый корень поддерева.

8. **Проверка существования (Exists)**:
   - Логика поиска должна соответствовать логике вставки: `key > node->data` ищи влево, `key < node->data` ищи вправо.
   - Верни `true`, если узел найден, иначе `false`.

9. **Ввод/Вывод (main)**:
   - Считай количество операций `n`.
   - В цикле обрабатывай команды:
     - `A x`: Вызови `Insert`. Выведи баланс корня. Если дерево пустое, выведи 0.
     - `D x`: Вызови `Delete`. **Важно**: Если узел не был найден и удален, **НЕ выводи ничего**. Если удаление прошло успешно, выведи баланс корня.
     - `C x`: Вызови `Exists`. Выведи 'Y', если true, иначе 'N'.

# Anti-Patterns
- НЕ используй `malloc`/free`. Используй `new` и `delete`.
- НЕ используй стандартную логику AVL (Left < Node < Right).
- НЕ меняй формулу баланса на `right - left`. Используй строго `left - right`.
- НЕ ищи преемника в левом поддереве при удалении.
- Не копируй узлы целиком (`*node = *temp`) при удалении, так как это нарушает связи родительских указателей (копируйте только `data`).

## Triggers

- реализовать инвертированное AVL дерево
- AVL дерево левое больше правого
- инвертированная логика AVL C++
- AVL tree inverted storage
- кастомный баланс AVL left right

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…