ich dies vollständig durch nicht gedacht, sondern eine Möglichkeit, einen Baum von bestimmten Tiefe zu bekommen ist Ihre Elemente zu sortieren, bevor sich das Einfügen: dh Sortierung dann N
Elemente in einen binären Suchbaum eingefügt wird, einen Baum produzieren der Tiefe N
.
Sie könnte der Lage sein:
- Sortieren Sie die Elemente
- Legen Sie eine bestimmte
K=4
von ihnen einen Baum von Tiefe erzeugen K
- Setzen Sie die übrigen Elemente in einer solchen Art und Weise, dass die Baum wird nicht tiefer.
(natürlich die Entscheidung, welche K
Elemente mit zu beginnen und eine Strategie, die übrigen Elemente zum Einfügen ist der schwierige Teil - aber vielleicht wäre dies ein Anfang sein)
bearbeiten : Ich denke, eine allgemeine Lösung ist möglich, vorausgesetzt, K
ist groß genug. Wie wäre es damit:
- Bei
10, 7, 16, 12, 5, 11, 2, 20, 1, 14
- Sortieren Sie die Elemente:
1, 2, 5, 7, 10, 11, 12, 14, 16, 20
- Setzen Sie die letzten K = 4 Elemente, dann die letzten K-1, dann K-2, und so weiter, bis hinunter zu 1 .
beispielsweise nach dem Sortieren und das Einsetzen der letzten 4:
12
\
14
\
16
\
20
... dann nach dem Einlegen der letzten 3:
12
/\
7 14
\ \
10 16
\ \
11 20
... dann nach den letzten 2:
12
/\
7 14
/\ \
2 10 16
\ \ \
5 11 20
... und schließlich nach dem Einfügen des letzten Elements:
12
/\
7 14
/\ \
2 10 16
/\ \ \
1 5 11 20
... Sie sind mit einem BST der Höhe K = 4 übrig.
Beachten Sie, dass dieser Ansatz nur funktioniert, wenn K
groß genug ist - speziell wenn K(K+1)/2 >= N
.
möglich Duplikat [Balancing ein Binary Tree (AVL)] (http://stackoverflow.com/questions/133610/balancing-a-binary-tree-avl) – Flexo
Sie müssen die [Balancing Binary Tree] (http://en.wikipedia.org/wiki/Self-balancing_binary_search_tree) –
Ich bin nicht auf der Suche nach einem ausgewogenen Baum als solche, mehr bestimmen eine Reihenfolge der ganzen Zahlen, die eine Höhe von 4 bekommen würde. – Tobi3