Binärbaum

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
SpiderWoman
User
Beiträge: 5
Registriert: Dienstag 20. Mai 2003, 21:20
Wohnort: Nähe Bonn

Hi, ich suche eine Klasse die Binärbäume erstellt. In der Quick-Ref. habe ich nichts gefunden.

Was habe ich vor? Ich will eine Inorder-Notation in eine Preorder-Notation ändern. Dazu dachte ich ich baue einen BinBaum auf und lese den dann rückwärts vom untersten rechten Blatt, linkes Blatt, Vater aus. Wenn ihr zur Implementation Tipps habt, wäre ich euch sehr dankbar.

Viele Grüße aus Bonn
SW
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Hallo!
Sorry, (nervös im Sedgewick blätternd) da kann ich nicht viel Sachdienliches zu beitragen. Schon zu lange her und nie gebraucht. Falls sich sonst hier niemand findet, hilft Dir vielleicht ein Diskussionsthread aus der Python-Mailingliste weiter:
http://starship.python.net/pipermail/py ... .html#3171
Die Mailingliste ist für anspruchsvollere Sachen sehr empfehlenswert. Anmelden kannst Du Dich dafür unter http://python.net/mailman/listinfo/python-de .
Jan
Beyond
User
Beiträge: 227
Registriert: Freitag 6. September 2002, 19:06
Kontaktdaten:

Vielleicht mal im Zope-Code "blättern". Dort gibt's Btree, IOBTree, OOBtree

Alles BTrees, je nach Zuordnung Integer->Objekt usw.

:?: Aber da war doch noch nen Unterschied zwischen BTree und binary Tree? Richtig? War aber 'ne Feinheit der Implementation ...

cu beyond
SpiderWoman
User
Beiträge: 5
Registriert: Dienstag 20. Mai 2003, 21:20
Wohnort: Nähe Bonn

Danke für die Tips!
Beyond: was ist der Zope-Code und wo finde ich den?
Voges: die Mailinglist ist wirklich ein guter Tip. Ich werde vermutlich sehr schnell einige anspruchsvollere Sachen machen müssen. <<Seufz>>

Liebe Grüße
Monika
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Hi SpiderWoman,

ich hab mal auf die schnelle eine Treeklasse erstellt:

Code: Alles auswählen

#!/usr/bin/env python

class Node :
    def __init__(self, value) :
        n = len(value)
        a = value[:n/2]
        b = value[n/2+1:]
        self.value = value[n/2]
        if len(a) :
            self.left = Node(a)
        else :
            self.left = None
        if len(b) :
            self.right = Node(b)
        else :
            self.right = None


    def inorder(self, func, depth = 1) :
        if self.left :
            self.left.inorder(func, depth+1)
        func(self.value, depth)
        if self.right :
            self.right.inorder(func, depth+1)

    def preorder(self, func, depth = 1) :
        func(self.value, depth)
        if self.left :
            self.left.preorder(func, depth+1)
        if self.right :
            self.right.preorder(func, depth+1)
        
    def postorder(self, func, depth = 1) :
        if self.left :
            self.left.postorder(func, depth+1)
        if self.right :
            self.right.postorder(func, depth+1)
        func(self.value, depth)

if __name__ == '__main__' :
    def out(x, depth):
        print "  "*depth, x
        
    a = [0,1,2,3,4,5,6,7,8,9]
    tree = Node(a)
    print "inorder:"
    tree.inorder(out)
    print "preorder:"
    tree.preorder(out)
    print "postorder:"
    tree.postorder(out)
Gruß

Dookie
Beyond
User
Beiträge: 227
Registriert: Freitag 6. September 2002, 19:06
Kontaktdaten:

Zope: www.zope.org

Ein objektorientierter Webserver auf Python-Basis --- Wohl die bekannteste Python Anwendung.

Es lohnt sich auf jeden Fall einen Blick darauf und auf den Code zu werfen.
Allerdings mußte ich nach intensiver Beschäftigung damit einige riesen Fehler und Unschönheiten entdecken.
Insgesamt trotzdem ein gutes Konzept.

cu beyond
SpiderWoman
User
Beiträge: 5
Registriert: Dienstag 20. Mai 2003, 21:20
Wohnort: Nähe Bonn

Nochmal danke für die Hilfe.
Gruss
Monika
Antworten