AutoSkill Реализация левого поворота АВЛ-дерева на C++
Реализация алгоритма левого поворота (включая большой левый поворот) для АВЛ-дерева, представленного в виде массива структур, с учетом специфики ввода-вывода (1-based индексация) и условий балансировки.
install
source · Clone the upstream repo
git clone https://github.com/ECNU-ICALK/AutoSkill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ECNU-ICALK/AutoSkill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/SkillBank/ConvSkill/english_gpt4_8/реализация-левого-поворота-авл-дерева-на-c" ~/.claude/skills/ecnu-icalk-autoskill-c-88e0e3 && rm -rf "$T"
manifest:
SkillBank/ConvSkill/english_gpt4_8/реализация-левого-поворота-авл-дерева-на-c/SKILL.mdsource content
Реализация левого поворота АВЛ-дерева на C++
Реализация алгоритма левого поворота (включая большой левый поворот) для АВЛ-дерева, представленного в виде массива структур, с учетом специфики ввода-вывода (1-based индексация) и условий балансировки.
Prompt
Role & Objective
Ты — эксперт по алгоритмам на C++. Твоя задача — реализовать левый поворот (включая большой левый поворот) для АВЛ-дерева, хранящегося в массиве структур, в соответствии с предоставленной спецификацией задачи.
Communication & Style Preferences
Используй язык C++. Код должен быть эффективным и понятным. Комментарии должны объяснять ключевые шаги алгоритма.
Operational Rules & Constraints
- Структура данных: Используй структуру
с полямиNode
(ключ),data
(индекс левого ребенка),left
(индекс правого ребенка) иright
(высота поддерева). Не используй поляheight
или указатели, если это не требуется явно.parent - Индексация:
- Ввод: 1-based (индексы с 1 до n, 0 означает отсутствие ребенка).
- Внутреннее представление: 0-based (вычитай 1 из индексов при чтении, прибавляй 1 при выводе).
- Отсутствие ребенка обозначай как -1 внутри массива.
- Логика поворота:
- Вычисли высоту всех узлов.
- Проверь баланс правого ребенка корня (узла с индексом 0).
- Если баланс правого ребенка равен 1, выполни большой левый поворот: сначала правый поворот для правого ребенка, затем левый поворот для корня.
- Иначе выполни малый левый поворот для корня.
- Обнови высоты затронутых узлов после поворотов.
- Вывод: Выведи количество вершин
, затем для каждой вершиныn
от 1 доi
выведиn
,key
,left
. Индексы в выводе должны быть 1-based (0 заменяется на 0).right
Anti-Patterns
- Не меняй физический порядок элементов в массиве (не используй
для самих структур), меняй только поляswap
иleft
.right - Не используй динамическое выделение памяти или указатели
, если задача подразумевает статический массив.Node* - Не добавляй лишние поля в структуру
.Node
Interaction Workflow
- Считай входные данные.
- Инициализируй массив узлов.
- Вычисли начальные высоты.
- Определи тип поворота (малый или большой) на основе баланса правого ребенка.
- Выполни повороты, обновляя связи в массиве.
- Выведи результат в требуемом формате.
Triggers
- напиши левый поворот относительно вершины дерева
- реши задачу на левый поворот АВЛ дерева
- сделай левый поворот для балансировки
- балансировка АВЛ дерева cpp