mikrocontroller.net

Forum: PC-Programmierung Python: binärer Baum -> Probleme


Autor: baum (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo allerseits!

Ich bin gerade dabei einen binäre Baum in Python zu programmieren.
Das ganze basiert auf einem Kompositum.

Es gibt eine Abstrakte Oberklasse "Baumelement" für die beiden 
Abschlüsse ( "AbschlussL" und "AbschlussR". Außerdem noch eine Klasse 
"Knoten" und "Baum"
Jetzt habe ich mich mal an der Methode "einfuegen" versucht aber es will 
eifnach nicht klappen. Ich muss ja am Anfang vergleichen ob mein 
einzufügendes element > oder < meiner wurzel ist. Doch genau immer mit 
dieser wurzel scheitere ich bzw. bringt er einen Fehler egal was ich 
mache. Wie könnte ich das mit der wurzel geschickt lösen?

Wäre wirklich sehr dankbar für Hilfe, da ich langsam echt keinen Nerven 
mehr hab :D

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
baum schrieb:
> Es gibt eine Abstrakte Oberklasse "Baumelement" für die beiden
> Abschlüsse ( "AbschlussL" und "AbschlussR". Außerdem noch eine Klasse
> "Knoten" und "Baum"
Hört sich kompliziert an ;)
> Ich muss ja am Anfang vergleichen ob mein
> einzufügendes element > oder < meiner wurzel ist.
Wenn du einen binären Suchbaum haben willst ist das Vorteilhaft...

Ich würde ein einziges "Element" nutzen, welches einen Wert, einen 
linken und einen rechten Nachbarn hat.

Ein Knoten zeichnet sich dann dadurch aus, das er einen linken oder 
rechten Nachbar hat, ein Blatt ein solches was keins von beidem hat.

Das hat den Vorteil, dass du immer mit der gleichen Datenstruktur 
arbeiten kannst und eventuell löst sich der "Knoten" mit der Wurzel auch 
von alleine auf ;)

(Ein Baum charakterisiert sich dann einfach indem du einen "root"/wurzel 
Knoten hast)

Autor: baum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde es auch sehr gerne anders machen aber leider ist es so 
vorgegeben.(Aufgabenstellung). Ich muss genau diese Klassen nehmen und 
soll es so mit > und < machen. Aber Ich müsste ja eiegentlich nur den 
Benutzer aufforden eine Wurzel zu erstellen anhand deren string dann die 
anderen eingaben mit > oder < einsortiert werden. Nur iwie klappt es 
einfach nicht egal wie und wo ich eine Wurzel erstellen will bringt er 
einen Fehler. Entweder steh ich grad so auf dem Schlauch...

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
baum schrieb:
> einen Fehler. Entweder steh ich grad so auf dem Schlauch...
Oder der Fehler sagt was da falsch läuft? "Irgendein Fehler" ist wenig 
hilfreich bei der Analyse.

Autor: baum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oh sry ganz vergessen zu schreiben. Am meisten kommt der Fehler "global 
name wurzel is not defined" immerm wenn ich was mit dieser wurzel machen 
will.

Autor: qwertz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann wirst du keine globale Variable "wurzel" haben... für mehr müsste 
man Quelltext sehen/die Struktur des Programms genauer kennen.

Autor: baum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@quertz habe das programm oben angehangen

Autor: qwertz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ups, übersehen... du erzeugst den Baum, wenn "wurzel" noch garnicht 
definiert ist, was soll der Interpreter denn dann bitte machen?

Autor: baum (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie meinst du das? das wurzel = knoten('test') ganz unten? oder 
woanderst?

Autor: qwertz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dein Fehler tritt vermutlich eine Zeile vorher auf. Weil da wird in der 
Funktion ja "wurzel" verwendet, obwohl das noch nicht definiert ist. Du 
solltest für sowas nicht auf globale Werte zurückgreifen, sondern diese 
als Parameter übergeben.

Autor: Daniel -------- (root)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
class Baum(object):
    "KLasse implemenitiert Baum"

    def __init__(self):

        self.abschlussL = AbschlussL()
        self.abschlussR = AbschlussR()
        self.nachfolgerL = AbschlussL
        self.nachfolgerR = AbschlussR
        global wurzel # ist hinzugekommen
        self.wurzel = wurzel

wurzel = ...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.