Naives links rechts einfügen in ADT Baum

ocsme

Top Contributor
Hallo zusammen,

hab eine Frage ich möchte sehr gerne einen Baum "irgendwie" füllen.
Also "einfach" von links nach rechts. Die Werte sollen dabei eben nicht verglichen werden :p
Ich setzt den ersten Wert auf die Wurzel und dann soll geprüft werden ist links etwas NEIN da kommt der nächste Wert rein. Beim nächsten insert muss das nächste Element nach Rechts. Danach will ich eine Ebene tiefer einfügen und da ist das Problem. Muss man dabei echt immer wieder alles abfragen denn jetzt müsste ich ja fragen ist von der Wurzel etwas links oder rechts Ja Ja also Wurzel -> links bei dem Knoten nachschauen und dort abfragen ist links schon etwas oder rechts ... und immer so weiter
Funktioniert das überhaupt "so einfach"? Denn ich glaube das wird etwas komplizierter.

Mir ist leider nichts dazu eingefallen. Was man sicherlich machen könnte wäre die Ebene zu speichern und dann sagen von bis ist diese Ebene also lauf durch und füg ein. Das wollte ich jetzt aber nicht alles so umschreiben (Fauler Mensch :D) deswegen mal hier nachfragen ob jemand eine Idee hat.

Momentan ist es eben totaler Quatsch und sieht so aus:
Java:
    public boolean insert(T element) {
        if (isEmpty()) {
            root = new Node<T>(element);
            return true;
        } else
            insert(element, root);
        return true;
    }

    private Node<T> insert(T element, Node<T> node) {
        if (node == null)
            node = new Node<T>(element);
        else {
            if(node.getLeft() == null && node.getRight() == null)
                node.setLeft(insert(element, node.getLeft()));
            else node.setRight(insert(element,node.getRight()));
        }
        return node;
    }


Wie gesagt wenn das ganze zu Kompiliert werden würde dann lassen wir das erst mal und ich werde mich damit wieder beschäftigen wenn ich nicht noch 1000 Aufgaben hätte die ich machen MUSS :D (muss naja Freiwillig doch bringt hoffentlich etwas :D)

Liebe Grüße :)
 

mihe7

Top Contributor
Wenn ich Dich richtig verstanden habe, dann willst Du eine Breitensuche nach einem noch nicht vollständig gefüllten Knoten durchführen.

Dazu legst Du Dir eine Todo-Liste an. In die steckst Du zu Beginn die Wurzel. Jetzt arbeitest Du die Todo-Liste ab, bis sie leer ist. Dabei entnimmst Du das erste Element der Liste (=Knoten, zu Beginn ist das gerade die Wurzel), schaust ob dieses Element Deinen Anforderungen entspricht. Falls ja, hast Du den gesuchten Knoten gefunden. Falls nein, fügst Du alle unmittelbaren Kindknoten des Elements hinten an die Todo-Liste an.

Beispiel mit einem vollständig gefüllten, binären Baum der Höhe 3 (inkl. Wurzel). Die Knoten seien von 0 bis 8 von oben nach unten, von links nach rechts durchnummeriert:

Code:
todo = {0} // Wurzelknoten in Todo-Liste
e := todo.remove(0); // e == 0
e ist vollständig gefüllt (Kindknoten 1, 2) also beide Kinder in Todo-Liste stecken -> todo = {1,2}
e := todo.remove(0); // e == 1
e ist vollständig gefüllt (Kindknoten 3,4) also beide Kinder in Todo-Liste stecken -> todo = {2, 3, 4}
e := todo.remove(0); // e == 2
e ist vollständig gefüllt (Kindknoten 5, 6) also beide Kinder in Todo-Liste stecken -> todo = {3, 4, 5, 6}
e := todo.remove(0); // e == 3
e ist nicht vollständig gefüllt -> Suche beendet, nächster Eintrag muss also an e eingefügt werden...
 

ocsme

Top Contributor
Moment Breitensuche und Tiefensuche habe ich eh noch nicht verstanden :p wird noch gemacht :)

Soll ich jedem Knoten also eine Nummer geben die könnte man dann leicht Abfragen und bei jedem insert Aufruf kommen 2 Knoten zur toDo Liste hinzu?

Danke für die schnelle Antwort :)

LG
 

mihe7

Top Contributor
Soll ich jedem Knoten also eine Nummer geben die könnte man dann leicht Abfragen
Nein, die Nummer habe ich nur zu Darstellungszwecken gewählt. Du steckst in die Todo-Liste einfach Knoten-Objekte.

bei jedem insert Aufruf kommen 2 Knoten zur toDo Liste hinzu?
Es kommen alle Kindknoten hinzu. Bei einem binären Baum sind das 2 :)

Das, was ich beschrieben habe, ist ein iterativer Ansatz.
 

mihe7

Top Contributor
Noch was: das Vorgehen ist für Bäume, deren Knoten einen In-Grad von max. 1 haben. Für komplexere Bäume, ist die Lösung auch etwas komplizierter (Du musst Dir dann merken, welche Knoten Du bereits besucht hast).
 

ocsme

Top Contributor
Noch was: das Vorgehen ist für Bäume, deren Knoten einen In-Grad von max. 1 haben. Für komplexere Bäume, ist die Lösung auch etwas komplizierter (Du musst Dir dann merken, welche Knoten Du bereits besucht hast).

Leider bekomme ich es derzeit nicht hin! Werde das ganze hinten anstellen und es später wieder versuchen wenn wir Breitensuche bzw. Graphen durch haben :)
Ich danke dir für die Hilfe. Werde mich nochmal melden :)
Schreib es mir auf die toDo Liste :D :)

Das größte Problem was ich habe ist wie komme ich nachdem ich das erste Element rechts hin gesetzt habe wieder rechts rein.
Da bin ich eher versucht das ganze Mathematisch zu lösen über 2^t. t könnte man als Datenelement abspeichern und dann aufteilen wo was hin müsste. Das ganze hab ich noch nicht durchgespielt war nur meine erste Idee :)
Sonst wird mir das alles zu Komplex auch wenn es sicherlich nur ein paar Zeilen sind. So lange bin ich ja noch nicht "aktiv" im Geschäft :D

LG
 

Meniskusschaden

Top Contributor
Da bin ich eher versucht das ganze Mathematisch zu lösen über 2^t. t könnte man als Datenelement abspeichern und dann aufteilen wo was hin müsste. Das ganze hab ich noch nicht durchgespielt war nur meine erste Idee :)
Für so einen Ansatz könntest du die Anzahl der enthaltenen Elemente im Baum speichern und daraus beim Einfügen den Pfad zur korrekten Position errechnen. Allerdings müsstest du beim Entfernen eines Elementes darauf achten, den Baum wieder in die korrekte Form zu bringen, damit nachfolgende Einfüge-Operationen weiterhin korrekt funktionieren.

Beispiele zum Einfügen der ersten sechs Knoten:
110 = 12 => Wurzel
210 = 102 => Wurzel, links
310 = 112 => Wurzel, rechts
410 = 1002 => Wurzel, links, links
510 = 1012 => Wurzel, links, rechts
610 = 1102 => Wurzel, rechts, links
 

ocsme

Top Contributor
Noch einmal Danke :)
Werde das später wieder versuchen.

Hab andere Aufgaben die derzeit wichtiger sind :) da diese Aufgaben erledigt werden müssen :p

LG
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
richis-fragen Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
N Hey Leute und zwar versuche ich gerade ein 2D Spiel zu Programmieren aber die Figur will sich nicht nach links oder rechts bewegen :( Java Basics - Anfänger-Themen 12
izoards Sortier Algorithmus für Bounding Box Elememte Links nach Rechts und von Oben nach Unten Java Basics - Anfänger-Themen 33
K Ein Objekt Auto kennt den Inhalt seines links und rechtsstehenden Autos, wie soll man das ermöglichen Java Basics - Anfänger-Themen 2
S Animation/links-rechts Java Basics - Anfänger-Themen 9
B Alle Links in einem Text suchen und ersetzen mit einem neuen Link Java Basics - Anfänger-Themen 18
H Links/Rechtsverschiebung oder was stellt das dar? Java Basics - Anfänger-Themen 2
R HTTP-Links in Java Class finden Java Basics - Anfänger-Themen 3
M Erste Schritte Links öffnen Java Basics - Anfänger-Themen 6
C eine diagonale von rechts nach links im 2d-array Java Basics - Anfänger-Themen 1
U Best Practice Nicht-permanente Links auf Dateien Java Basics - Anfänger-Themen 5
M suche/brauche Links über rein GUI Beispielprogramme Java Basics - Anfänger-Themen 4
B Links & Zusatzinformationen aus PDFs zusammentragen Java Basics - Anfänger-Themen 2
Haubitze_Broese Pattern für Links in RSS-Reader Java Basics - Anfänger-Themen 6
S Links ausführen und Ausführzeiten festlegen Java Basics - Anfänger-Themen 4
0din Applet und Links Java Basics - Anfänger-Themen 4
S HEX oder String rotieren lassen (rechts raus, links rein) Java Basics - Anfänger-Themen 3
M Links anpassen Java Basics - Anfänger-Themen 2
M HTML in JOptionPane-Dialog aber keine Links Java Basics - Anfänger-Themen 6
B DL Links aus Textdatei in BB Code einbetten Java Basics - Anfänger-Themen 5
H Icon links oben im JFrame deaktivieren? Java Basics - Anfänger-Themen 2
S jpanel links oben ausrichten Java Basics - Anfänger-Themen 7
M quelltext html-seite speichern + links speichern Java Basics - Anfänger-Themen 2
K Grafik beim JFrame oben Links ändern nur wie ? Java Basics - Anfänger-Themen 8
J Links zum jdk 6 Java Basics - Anfänger-Themen 25
M Strings links, rechts und centriert ausrichten Java Basics - Anfänger-Themen 12
B Links verfolgen -- Bibliothek nicht gefunden? Java Basics - Anfänger-Themen 6
Z Applet text der sich von links nsch rechts bewegt Java Basics - Anfänger-Themen 3
G JPanel (Abstand von links) Java Basics - Anfänger-Themen 1
M Formulare ausfüllen / Links aktivieren [erledigt] Java Basics - Anfänger-Themen 3
A Links aus Firefox an Java Programm weiterleiten Java Basics - Anfänger-Themen 6
C Links fuer Tuts und so. Java Basics - Anfänger-Themen 2
D HTML Code einlesen und nach Links parsen Java Basics - Anfänger-Themen 10
L JavaFx ListView rechts abgeschnitten Java Basics - Anfänger-Themen 0
C Input/Output Magisches Quadrat Rechts Formatieren Java Basics - Anfänger-Themen 4
M rechts shift (>>>) einer negativen Zahl Java Basics - Anfänger-Themen 10
T JScrollPane soll rechts gescrollt gezeichnet werden Java Basics - Anfänger-Themen 5
P JFrame rechts am Bildschirmrand anzeigen Java Basics - Anfänger-Themen 3
N In einer JToolbar das Icon ganz rechts anordnen Java Basics - Anfänger-Themen 5
C mouseDown (Event e, int x, int y) rechts oder linksklick ? Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben