Wie stelle ich binäre Suchbäume in Python dar?repräsentieren binäre Suchbäume in Python
Antwort
class Node(object):
def __init__(self, payload):
self.payload = payload
self.left = self.right = 0
# this concludes the "how to represent" asked in the question. Once you
# represent a BST tree like this, you can of course add a variety of
# methods to modify it, "walk" over it, and so forth, such as:
def insert(self, othernode):
"Insert Node `othernode` under Node `self`."
if self.payload <= othernode.payload:
if self.left: self.left.insert(othernode)
else: self.left = othernode
else:
if self.right: self.right.insert(othernode)
else: self.right = othernode
def inorderwalk(self):
"Yield this Node and all under it in increasing-payload order."
if self.left:
for x in self.left.inorderwalk(): yield x
yield self
if self.right:
for x in self.right.inorderwalk(): yield x
def sillywalk(self):
"Tiny, silly subset of `inorderwalk` functionality as requested."
if self.left:
self.left.sillywalk()
print(self.payload)
if self.right:
self.right.sillywalk()
etc, etc - im Grunde wie in einer anderen Sprache, die Verweise eher als Zeiger (wie Java, C#, usw.) verwendet.
bearbeiten:
Natürlich ist die Existenz von sillywalk
ist in der Tat dumm, weil genau die gleiche Funktionalität eine einzelsträngige Liner externe Snippet auf der Oberseite der walk
Methode ist:
for x in tree.walk(): print(x.payload)
und mit walk
können Sie fast jede andere Funktionalität auf dem Knoten-in-Order-Stream erhalten, während mit sillywalk
, können Sie nur über Diddly-Kniebeugen erhalten. Aber, hey, das OP sagt yield
ist "einschüchternd" (Ich frage mich, wie viele von Pythons 2.6 anderen 30 Keywords verdienen solche Angst Worte in der OP-Urteil?) Ich hoffe also print
ist nicht!
Das alles komplett über die eigentliche Frage ist, auf darstellt BSTs: dass Frage ganz im __init__
beantwortet wird - ein payload
Attribut des Knotens Nutzlast zu halten, left
und right
Attribut zu halten entweder None
(was bedeutet, , dieser Knoten hat keine Nachkommen auf dieser Seite) oder Node
(der obere Teil des Unterbaums der Nachkommen auf der entsprechenden Seite). Natürlich besteht die BST-Einschränkung darin, dass jeder linke Nachkomme jedes Knotens (falls vorhanden) eine Nutzlast hat, die kleiner oder gleich ist als die des fraglichen Knotens, wobei jede rechte (wenn wieder irgendeine) eine größere Nutzlast hat - ich fügte insert
hinzu nur um zu zeigen, wie trivial es ist, diese Beschränkung aufrechtzuerhalten, walk
(und jetzt sillywalk
), um zu zeigen, wie trivial es ist, alle Knoten in ansteigender Reihenfolge der Nutzdaten zu erhalten. Wiederum ist die allgemeine Idee identisch mit der Art und Weise, wie Sie eine BST in einer beliebigen Sprache darstellen, die Referenzen statt Zeiger, wie zum Beispiel C# und Java verwendet.
Sie sollten dies ein wenig ausräumen, es ist ziemlich schwer, alle zusammen so zu lesen. – detly
@Alex Ausbeute !!!! : | Ich bin mir sicher, dass es für einen Neuling wie mich eine weniger einschüchternde Lösung als diese gibt. –
@Bunny, Python hat wirklich nur sehr wenige Keywords (31, ab 2.6) - welche aus dieser winzigen Zahl findest du "einschüchternd"? Wie auch immer, ich füge eine völlig alberne und sinnlose Methode hinzu (funktioniert im Wesentlichen wie "Gehen", aber auf eine wahnsinnig eingeschränkte Art und Weise), wenn dich das glücklich macht (und Whitespace hinzufügt, um @detly auch glücklich zu machen) - Bearbeiten Sie das A entsprechend. –
- 1. Werte in binäre Suchbäume einfügen
- 2. Mit 'N' keine Knoten, wie viele verschiedene binäre und binäre Suchbäume möglich?
- 3. Hashtabellen v selbstabgleichende Suchbäume
- 4. binäre Suche Bäume in Ruby
- 5. interpretieren binäre Daten in Python
- 6. Integrierte binäre Suchstruktur in Python?
- 7. Repräsentieren Array in C#
- 8. Binäre Suchbäume Max und Min Höhe basierend auf der Anzahl der Knoten
- 9. Python POST binäre Daten
- 10. Python - Binäre Datengröße-schneiden und Schreiben
- 11. binäre Dateien in ascii in Python
- 12. Repräsentieren Kmeans-Cluster in Grafiken
- 13. Repräsentieren UML-Diagramm in OWL
- 14. Python schreiben binäre Dateien, Bytes
- 15. binäre lineare Programmierung Solver in Python
- 16. Binäre Suche von Wörtern in Python-Liste
- 17. Binäre Suche in einer Python-Liste
- 18. binäre Suche in Python seltsames Verhalten
- 19. Python-Modul für binäre plist
- 20. Repräsentieren ng-Modell in einem Controller
- 21. repräsentieren zulässige Statusübergänge Graph in Perl
- 22. Regex zu repräsentieren „NOT“ in einer Gruppe
- 23. Repräsentieren Flowchart-spezifizierte Algorithmen in Haskell
- 24. Binäre Suche Bäume und Daten mit Python
- 25. Python bitweise Operation auf große binäre Zeichenfolgen
- 26. Python-Wörterbuch - binäre Suche nach einem Schlüssel?
- 27. Funktion aufgerufen, wenn binäre Operatoren, Python
- 28. Zahl in binäre Zeichenfolge konvertieren
- 29. Wie Ausgabeliste der Schwimmer in eine binäre Datei in Python
- 30. Unesco/binäre Strings in (erweiterte) URL-Codierung in Python
Können Sie genauer sein? Was versuchst du zu machen? –
Ich versuche eine binäre Suchbäume zum Lernen zu bauen. –