Ich bin mir nicht sicher, ob ich dies Grübeln, aber ich kann von der allgemeinen Fall Lösung nicht denken :(Vollständige und vollständige binäre Baum max und min Indizes?
Antwort
Soweit wir speichern Knoten in höhere Werten im rechten Teilbaum und kleinere Werte linker Teilbaum für jeden Knoten, der Knoten bei Bottom Right
Ecke wird den maximalen Wert und der Knoten bei Bottom Left
Ecke wird den minimalen Wert haben.
So jetzt müssen Sie die Knoten zu finden.Es wird angegeben, dass der Baum ist Complete and Full BST
und auch in Array gespeichert, so dass die Indizes gleichmäßig über den Knoten verteilt sind es. Hier müssen wir also Top to Bottom
und Left to Right
verschieben, um Knoten, beginnend mit 1
bis n
, Index zuzuweisen, wenn n
Knoten vorhanden sind.
Wenn wir also Indizes für bestimmten Baum schreiben,
1
/ \
2 3
/ \ / \
4 5 6 7
/\ ^^^-------------Largest value
8 9
Smallest value----^^^
Also hier ein Knoten mit 8
Index wird den kleinsten Wert und ein Knoten mit 7
Index mit dem größten Wert wird sein müssen.
So jetzt ist die Frage, wie man es findet. Überlegen Sie sich also, dass wir einen Baum mit dem Level l
haben, dann wird der Index für den größten Wert 2^level - 1
sein und der kleinste Wert wird bei 2^level
th Index sein. Aber der Index, den wir hier für den größten Wert erhalten, kann uns eine falsche Antwort geben, wenn total_nodes = 2^level-1
. Also müssen wir level
dafür auf eine andere Weise berechnen, indem wir total_nodes = n+1
betrachten.
int level = (int)(Math.ceil (Math.log(n)/Math.log(2))); //For index of smallest value;
int smallest_index = (int) Math.pow (2,level);
level = (int)(Math.ceil (Math.log(n+1)/Math.log(2))); //For index of largest value;
int largest_index = (int) Math.pow (2,level) - 1;
Sankets Antwort ist grundsätzlich richtig, aber die Art und Weise, wie es schließlich festgestellt wird, macht mich unbehaglich. Wer sagt, dass das abgerundete (!) Verhältnis von zwei gerundeten (!) Logs nicht auf nur etwas höher als die beabsichtigte ganze Zahl rundet? Und dann wird ceil
es bis ganz nach oben tragen. Vielleicht funktioniert es, aber es wäre im Wesentlichen zufällig, nicht durch Design.
Es kann auch "sauber" angegeben werden, ohne dass man sich Gedanken über solche Dinge machen muss, im Sinne der bitweisen Arithmetik. Alles bleibt eine Ganzzahl, also ist es einfacher, darüber nachzudenken.
Der Index des untersten Elements ist bei der höchsten in 2 vorhandenen Leistung in n
, also das höchste gesetzte Bit. In Java gibt es auch eine Funktion für das heißt: Integer.highestOneBit
, oder wir könnten sie schreiben:
int highestOneBit(int x) {
x |= x >> 16;
x |= x >> 8;
x |= x >> 4;
x |= x >> 2;
x |= x >> 1;
return x^(x >>> 1);
}
Und wir haben jetzt
indexOfLowest = highestOneBit(n);
indexOfHighest = highestOneBit(n + 1) - 1;
Dies setzt voraus, noch 1 basierte Indizes (wobei der Index 0 nicht verwendet), Sie können einfach alles um 1 versetzen, um es 0-indexiert zu machen.
Dies ist der perfekte Weg, um das Level zu erhalten, da 'Math.ceil()' oder 'Math.log()' bei größeren Werten zu inkonsistenten Ergebnissen führen können. Daher ist es besser, die bitweise Operation zu verwenden, die eine korrekte Antwort garantiert. –
- 1. max() und min() python
- 2. ArangoDB vollständige Sammlung Scan und JOIN
- 3. Im Ort Min-Max-Baum Ungültigkeitsprobleme
- 4. MYSQL MAX und Min Abfrage
- 5. Highmaps min und max Zoomstufe
- 6. Min und Max Wert C++
- 7. Austauschen von Max und Min
- 8. Allgemein min und max - C++
- 9. Binäre Suchbäume Max und Min Höhe basierend auf der Anzahl der Knoten
- 10. C# Partielle Deserialisierung und vollständige Serialisierung
- 11. Decode vollständige Palette und kodieren Teil davon
- 12. zeigt vollständige Datum und Uhrzeit in Datagridview
- 13. git kann nicht binäre Patch anwenden *** ohne vollständige Indexlinie
- 14. SQL Server kopiert vollständige Tabellendefinition
- 15. Können wir Min-Margin und Max-Margin, Max-Padding und Min-Padding in CSS definieren?
- 16. Vollständige vollständige MySQL-Datenbankreplikation? Ideen? Was machen Leute?
- 17. SharePoint externe zugewandte Site Fähigkeit, vollständige Website und nicht vollständige Website gehen, wenn im mobilen Gerät
- 18. Anleitung für vollständige Anwendungsentwicklungspraktiken
- 19. 2-4 Baum Max/Min Anzahl der Knoten
- 20. Vollständige Verzeichnisstruktur mit pep8 durchsuchen
- 21. Vollständige Wortsuche in LINQ
- 22. Vollständige XML-Schema-Validierung
- 23. Observable Iteration vollständige Ereignis
- 24. Vollständige WKWebView-URL
- 25. Wie vollständige URL-Adresse
- 26. Falsches Max und Min in Python-Code
- 27. MIN/MAX vs ORDER BY und LIMIT
- 28. MySQL min und max jeder Spalte
- 29. Max- und Min-Werte in Google Charts
- 30. Wie max, min und durchschnittlich in postgresql
Wenn man bedenkt, dass ein binärer Suchbaum ein sortierter Baum ist, in dem jeder linke Knoten kleiner als sein Elternteil ist und jeder rechte Knoten größer als sein Elternknoten ist, würde der kleinste Wert ganz links und der größte Wert sein ist ganz rechts. –