Если вы хотите создать максимально изогнутое дерево AVL, вы ищете дерево Фибоначчи , которое определяется индуктивно следующим образом:
- Дерево Фибоначчи порядка 0 пусто.
- Дерево Фибоначчи порядка 1 - это один узел.
- Дерево Фибоначчи порядка n + 2 является узлом, левый дочерний элемент которого является деревом Фибоначчи порядка n, а правый дочерний элемент которого является деревом Фибоначчи порядка n + 1.
Например, вот дерево Фибоначчи порядка 5:
Деревья Фибоначчи представляют максимальную величину перекоса, которую может иметь дерево AVL, поскольку, если бы коэффициент баланса был более односторонним, коэффициент баланса каждого узла превысил бы пределы, установленные деревьями AVL.
Вы можете использовать это определение, чтобы очень легко генерировать максимально односторонние деревья AVL:
function FibonacciTree(int order) {
if order = 0, return the empty tree.
if order = 1, create a single node and return it.
otherwise:
let left = FibonacciTree(order - 2)
let right = FibonacciTree(order - 1)
return a tree whose left child is "left" and whose right child is "right."
Надеюсь, это поможет!