Ich bereite grundlegende Algorithmen und Datenstrukturen auf.Binäre Suchbaum: Wie/wenn mit unglücklichen Inserierung Aufträge zu behandeln?
Eine typischer binärer Suchbaum Einfügung Algorithmus sieht ungefähr so aus:
insert(newValue)
if newValue is less than node.value:
if lesser subtree exists:
insert into lesser subtree
otherwise:
lesser subtree = new tree with newValue
if newValue is greater than node.value
if greater subtree exists:
insert into greater subtree
otherwise:
greater subtree = new tree with newValue
Mit einem unglücklichen Auftrag, können Sie einen Baum erhalten, die auf eine Liste identisch ist:
insert(1)
insert(2)
insert(3)
Produziert:
1
\
2
\
3
Mit einem Baum, der eigentlich eine Liste ist, wird die Suche natürlich lineare Zeit nehmen e.
Wird für eine binäre Suchbaumimplementierung erwartet? Oder würden Sie erwarten, dass die Einfügefunktion eine Art Neuausrichtung durchführt?
Hallo Nick, ja, würden Sie haben in der Regel eine Neugewichtung Schritt zu vermeiden Sie genau das Szenario, auf das Sie oben hingewiesen haben. Ich denke, die meisten Datenstruktur-Lehrbücher sollten dies abdecken; Wenn nicht, würde eine Suche auf SO oder Google wahrscheinlich einen guten Ausgangspunkt für einen Algorithmus zur Neuverteilung ergeben. –
Hast du gegoogelt und nichts gefunden? –
Sie möchten einen [selbstbalancierenden binären Suchbaum] (https://en.wikipedia.org/wiki/Self-balancing_binary_search_tree). –