Ich implementiere gerade einen Algorithmus, bei dem ich wissen muss, wie viele Zahlen von denen, die bereits gelesen wurden, kleiner als die aktuelle sind verarbeitet werden.Zähle Anzahl kleinerer Werte beim Einfügen in den binären Suchbaum (BST)
Ein Weg, dies zu tun, ist durch merge sort, aber ich bin mehr interessiert an einem BST-Ansatz.
Dieses Verfahren soll in O(log n)
die Anzahl der Knoten mit Wert kleiner als der Schlüssel Knotens Wert berechnen:
countLessThan(int x, node T)
if T = null
return
if T.value >= x
countLessThan(x, T.left) // T.left contains only numbers < T.value and T.right only numbers > T.value
else
globalResult += T.numLeft
countLessThan(x, T.right)
Die numLeft
Feld in diesem Fall in jedem Knoten gespeichert werden würde, und die Anzahl der Knoten repräsentieren in seinem linken Teilbaum (selbst enthalten).
Also meine Frage ist, wie dieses bestimmte Feld auf schnelle Weise zu aktualisieren?
erhöht werden, Sie könnten den numLeft Wert jedes Knotens aktualisieren Sie durchlaufen, wenn du bist Suche, wo jeder neue Wert in den Baum eingefügt werden soll; dann könntest du es sofort auslesen. – m69
Yup, ich kam irgendwann auf die gleiche Idee. Kannst du das als Antwort posten, um die Frage zu beenden? – user43389
Ich denke, benutze Heap Tree. – Ultraviolet