Ich versuche, eine Methode in Java zu schreiben, die einen binären Baum balanciert, wie folgt beschrieben:Java - ein Binary Tree Guthaben bei der "Brute Force"
... eine Inorder Traversal des Baumes schreiben an ein Array und verwenden Sie dann eine rekursive Methode (ähnlich wie bei der binären Suche), um das mittlere Element des Arrays als Root einzufügen und dann symmetrische linke und rechte Teilbäume zu erstellen.
Allerdings bin ich ratlos, wie das alles zusammen zu tun ist. Ich habe bisher verschiedene Ansätze ausprobiert, aber nichts hat funktioniert.
Ich habe auch bereits einen InOrder-Iterator, der eine ArrayList aller Elemente in der Struktur zurückgibt, so dass dies abgedeckt ist.
Dies ist, was ich zur Zeit bauen weg von:
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
}
und dann das ich einfach am Ende des Add haben/entfernen Methoden Element:
if ((getHeight() - getMinHeight()) > 5)
rebalance();
Also, wie könnte Ich gehe darüber?
Rebalancing ist nicht notwendig - nur bauen. (Die Aufgabe selbst ist witzig - Sie können einen ausgewogenen Suchbaum erstellen, wenn Sie die Anzahl der Elemente und die Elemente in monotoner Reihenfolge wählen und keinen direkten Zugriff benötigen. Bei einem geordneten Array würde der Grund für die Erstellung eines Baums darin bestehen, Aktualisierungen zu unterstützen.) – greybeard