Как насчет создания полного сбалансированного дерева с несколькими узлами на самом низком уровне, которые, возможно, отсутствуют, например, для 6 элементов, создайте
o
/ \
o o
/ \ /
o o o
Затем выполните обход inorder, и когда вы посещаете i-й узел, установите его ключ на A [i].
Это допустимое дерево AVL, поскольку у каждого узла есть левый и правый дочерний элемент, высота которого отличается не более чем на единицу.
Исходное дерево можно построить в O (n), а обход по порядку в O (n), поэтому сложность составляет O (n).
Между прочим, в полусвязанной ноте есть метод, называемый heapify, для построения кучи (mix или max) из массива целых чисел, который O (n) для массива длины n, даже если вставка в кучу равна O (log n) - хитрость заключается в том, чтобы сделать это снизу вверх.