Я пытаюсь написать метод в Java, который уравновешивает бинарное дерево, описываются следующим образом:Java - Баланс бинарного дерева с «Brute Force»
... написать заказовМой обход дерева , а затем использовать рекурсивный метод (подобно бинарному поиску), чтобы вставить средний элемент массива в качестве корня, а затем построить сбалансированные левые и правые поддеревья.
Однако я не понимаю, как это сделать. До сих пор я пробовал различные подходы, но ничего не сработало.
У меня также есть итератор inOrder, который возвращает ArrayList из всех элементов в дереве, так что он закрыт.
Это то, что я в настоящее время здание прочь:
public void rebalance()
{
Iterator<T> it = iteratorInOrder();
List<T> list = new ArrayList<>();
while (it.hasNext())
{
list.add(it.next());
}
balanceRecursive();
}
private void balanceRecursive()
{
//something here
}
, а потом я просто это в конце добавить/удалить методы элемента:
if ((getHeight() - getMinHeight()) > 5)
rebalance();
Итак, как может Я об этом?
Ребалансировка не требуется - просто построить. (Сама задача смешна - вы можете построить сбалансированное дерево поиска, учитывая количество элементов и элементов в монотонной последовательности, не требуя случайного доступа. С упорядоченным массивом причиной создания дерева будет поддержка обновлений.) – greybeard