Баланс BST дерево вручную
Я выполнил балансировку дерева (bst>avl), запрошенного вручную, и мне интересно, что это было действительно легко, поэтому я не уверен, правильно ли я это сделал.
/ \ б е3 / \ е1 е2
начальное состояние: "a" является родителем "b" (слева) и "e3" (справа), "b" является родителем "e1" (слева) и "e2" (справа).
применение правого вращения дает нам:
б / \ e1 a / \ е2 е3
"b" вместо "a" с дочерним элементом "e1" слева и "a" с дочерним элементом справа, "a" получает "e2" из "b" слева.
Итак, вопросы:
- Если e1 само по себе является поддеревом или узлом, содержащим другие элементы, могу ли я сделать это вращение?
- 2. Если e2 и e3 отсутствуют, могу ли я сделать это вращение?
пример 11; 12; 16
16 / 13 / 10
начальное состояние: 16 является родителем 13 и 13 является родителем 10. Могу ли я сделать из этого: 13 является родителем 10(слева) и 16(справа)
Я знаю, что это упрощенно, но теория часто не покрывает эти вещи, предполагая, что это понятно, ну, не для всех. Спасибо за помощь,
1 ответ
Да ко всему, правда. Подумайте о свойстве порядка: левые потомки <узел, а узел <правые потомки. Обратите внимание, как вращение сохраняет это; сравните a и b с e1, e2 и e3 до вращения и проверьте порядок и отношения потомков после вращения. Я позволю тебе подумать, прежде чем отдать это.