Seite 1 von 1
Binärbaum
Verfasst: Donnerstag 22. Mai 2003, 14:23
von SpiderWoman
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
Re: Binärbaum
Verfasst: Donnerstag 22. Mai 2003, 18:23
von Voges
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
Verfasst: Freitag 23. Mai 2003, 00:58
von Beyond
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
Zope Code?
Verfasst: Freitag 23. Mai 2003, 06:44
von SpiderWoman
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
Verfasst: Freitag 23. Mai 2003, 16:47
von Dookie
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
Verfasst: Samstag 24. Mai 2003, 11:54
von Beyond
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
Ihr seid wirklich super!
Verfasst: Donnerstag 29. Mai 2003, 16:13
von SpiderWoman
Nochmal danke für die Hilfe.
Gruss
Monika