ja ich muss sagen, das ist eine Art Hausaufgabe und ich erwarte nicht, die Antwort zu bekommen, aber ich habe keine Ahnung, wie hier fortfahren.Ich versuche, den Nachfolger eines Schlüssels in einem binären Suchbaum in der Zeit zu finden O (1)
Ich weiß, wie man den Nachfolger und den Vorgänger auf verschiedene Arten findet, aber keiner von ihnen arbeitet in der Zeit komplex O (1).
Die Übung sagt, dass wir mehr Informationen an jedem Knoten speichern können. Die Einfüge- und Löschfunktionalität sollte jedoch zu einer komplexen Zeit von O (h) konstant sein, wobei h die Höhe des Baumes ist.
Meine erste und einfach zu implementierende Idee war, in jedem Knoten zu speichern, wie viele linke und rechte Knoten dieser Knoten haben. Also muss ich nur die Einfüge- und Löschmethode jedes Mal ändern, wenn ein Knoten übergeben wird, um diese Variablen für jeden Knoten zu erhöhen oder zu verringern. Aber ich habe keine Ahnung, wie diese Information die Zeitkomplexität von O (1) übertreffen kann.
Wie wäre es mit der Erinnerung an Nachfolger Knoten beim Einfügen und dann diese Informationen abrufen? Etwas wie 'insert (Knoten) {... node.parentNode = ParentNode}, getParentNode (node) {return node.parentNode}' – Destiner
Suchen Sie nach dem Thread-binären Baum Ansatz –
Dies ist eine alte Frage, aber den Nachfolger von a Der binäre Suchbaum (mit Elternzeigern, die die meisten BST-Implementierungen verwenden) ist * bereits * "O (1)" in * amortisierter * Zeit. –