Ich möchte eine Sammlung von Objekten haben, sortiert nach einer numerischen Eigenschaft, val
. Ich möchte in der Lage sein, alle Objekte abzurufen, die übereinstimmen, wo val
mit einem Wert übereinstimmt, zB x
, oder wenn keine Objekte mit der Eigenschaft val
übereinstimmen x
, finden Sie die Objekte mit dem nächsten val
über und unter x
. (Mehrere Objekte können die gleichen Werte für val
haben)Finde die nächsten Knoten im binären Suchbaum
Eine der wenigen BST-Bibliotheken, die ich gefunden habe, ist dsjslib. Es hat, was es eine TreeMultiMap
nennt, die mehrere Werte für einen einzelnen Schlüssel hält. Das Problem ist, ich kann nicht sehen, wie ich Knoten am nächsten zu x
abrufen könnte, wenn es keine genauen Übereinstimmungen gibt.
Wie kann ich darüber gehen? Browser-Unterstützung für ES6 scheint weit zu kommen, also könnte ich vielleicht seine Map
dafür verwenden?
"die nächste über und unter" oben und unten, was? die Zahl x ist nicht gleich? – jessh
Am nächsten ist der letzte Knoten, den Sie überprüft haben und an dem Sie blockiert wurden - weil Sie nicht mehr in den Baum gehen können, da entweder ein erforderliches Kind fehlt oder ein Blatt ist - und möglicherweise dessen Elternteil. Ich kann später eine bessere Erklärung dafür geben, aber es kommt alles auf Beobachtungen an, die über BST gemacht werden können. –
Ich änderte meine Antwort so, dass sie, wenn sie nicht gefunden wurde, einen negierten Wert des erwarteten Index des fehlenden Gegenstands zurückgibt. Dies hilft Ihnen, die nächsten oberen und unteren Nachbarn leicht zu lokalisieren. – Redu