Wie können Sie Binary Tree auf binären Suchbaum mit O (1) zusätzlicher Raum umwandeln?
Binärbaum auf binären Suchbaum (BST)
einen ungeordneten binären Baumes in einen geordnete binären Suchbaum Umwandlung ist trivial, aber ein bisschen schwieriger schnell zu tun.
Hier ist eine naive Implementierung, die Ihre Kriterien erfüllen sollte, werde ich nicht die tatsächlichen Schritte beschreibt, zu nehmen, nur um den Gesamtalgorithmus.
- Schnappen Sie sich einen Zufallsblattknoten aus Ihrem bestehenden Baum
- Unlink den Blattknoten aus Ihrem bestehenden Baum
- Machen Sie den Knoten die Wurzel Ihrer neuen binären Suchbaum
- Schnappen Sie einen anderen Zufallsblattknoten aus Ihrem bestehenden Baum
- Verknüpfung aufheben, dass der Knoten aus Ihrem bestehenden Baum
- Finden Sie den richtigen Ort für, und verbindet die Knoten, in dem neuen binären Suchbaum
- Wiederholen Sie Schritt 4-6, bis der ursprüngliche Baum ist leer
Sie sollten nur wenige Variablen erfordern, wie die Eltern des Blattknoten Sie Entkoppeln (es sei denn, der Knoten hat Eltern-Links), den Wurzelknoten des neuen Baum und ein paar temporäre Variablen, die alle innerhalb Ihrer O (1 ) Raum Kriterien.
Dies wird nicht einen optimalen binären Suchbaum erzeugen. Dafür müssen Sie entweder die Knoten sortieren, bevor das Hinzufügen ihnen, und das Hinzufügen von ihnen in der richtigen Reihenfolge, oder verwenden Sie einen ausgleichenden binären Suchbaum, wie ein Rot-Schwarz-Baumes oder einen gespreizten Baum.
quelle vom benutzer Lasse Vågsæther Karlsen
Konvertieren Binary Tree zu einem doppelt verknüpften Listen- kann Inplace in O (n) es dann sortieren mit Mergesort erfolgen, nlogn Konvertieren Sie die Liste zurück an einem Baum - O (n)
Einfache nlogn Lösung.













