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.
def preorder(tree):
if tree:
yield tree[0]
for e in preorder(tree[1]):
yield e
for e in preorder(tree[2]):
yield e
def postorder(tree):
if tree:
for e in postorder(tree[1]):
yield e
for e in postorder(tree[2]):
yield e
yield tree[0]
def inorder(tree):
if tree:
for e in inorder(tree[1]):
yield e
yield tree[0]
for e in inorder(tree[2]):
yield e
aber das vestehe ich nicht. kann mir das jemand (alternativ) erklären?
MfG
Code Tags hab ich jetzt mal gesetzt (bitte beim nächsten mal benutzen @davidx). Allerdings kann ich auch nicht helfen, da es wie gesagt an Informationen mangelt.
also, ein Baum enthält ein Element und zwei Referenzen auf einen linken und einen rechten Teilbaum, diese Referenzen könne auch None sein, wenn keine abzweigung in diese Richtung geht.
Bei preorder wird zuerst das Element des Baumes zurückgegeben, dann kommt erst der linke Teilbaum (wenn nicht None), der ebenso verfährt und dann der rechte Teilbaum (wenn nicht None).
Bei postorder wird zuerst der linke Teilbaum angesprochen, dann der rechte und zum Echluss das eigene Element zurückgegeben.
Bei inorder kommt zuerst der linke Teilbaum, dann das eigene Element zurückgegeben und dann kommt der rechte Teilbaum drann.
oh sorry, ich hätte den source in diese tags zwängen sollen sorry.
zudem habe ich mich wirklich ungünstig ausgedrückt. was pre-, post-, und in- order ist ist mir klar allerderings die realisierung in phython nicht.
z.B. ist mir der in "meinem" source angegebene begriff yield nicht klar. ich weiß - ist kein python begriff sondern willkürlich gewählt aber vielleicht kann es mir trotzdem jemand erklören ggf. den richtigen code hinschreiben.
betreffemd des baumes:
sei B ein binärer baum. jeder knoten hat also zwei zweige, notfalls
none-zweige.
wie ist ein durchlauf zu realisieren der alle elemente des baumes in der gegebenen order (siehe oben) ausgibt? thx
yield ist kein willkürlicher begriff sondern ein Bestandteil von Python seit 2.2 glaub ich und wird in Iteratoren/Generatoren verwendet um den nächsten wert zu liefern.
yield e is so ähnlich wie return, nur dass der Generator beim nächsten aufruf von next an der stelle hinter yield weitermacht.