Traversierungsverfahren Baum: LevelOrder

Lights

Mitglied
Guten Tag,
wie ist es möglich einen Baum im LevelOrder verfahren wiederzugeben ? Gelungen ist es mir bereits im Inorder/PreOrder und postOrder verfahren.
Java:
package com.provinzial.www.binaerbaum;

import java.util.ArrayList;
import java.util.List;


public class Binaerbaum {

    private Knoten wurzel;

    public void einfuegen(int ordbg) {
        Knoten neu = new Knoten(ordbg);

        if (wurzel == null) {
            wurzel = neu;
        }

        else {
            Knoten lfd = wurzel;
            boolean weiter = true;

            while (weiter) {
                if (ordbg > lfd.getOrdbg()) {
                    if (lfd.getRechts() != null) {
                        lfd = lfd.getRechts();
                    } else {
                        lfd.setRechts(neu);
                        weiter = false;
                    }
                } else {
                    if (lfd.getLinks() != null) {
                        lfd = lfd.getLinks();
                    } else {
                        lfd.setLinks(neu);
                        weiter = false;
                    }
                }
            }
        }

    }

    public List<Integer> inOrder() {
        List<Integer> liste = new ArrayList<>();
        inOrder(wurzel, liste);
        return liste;
    }

    private void inOrder(Knoten knoten, List<Integer> liste) {
        if (knoten != null) {
            inOrder(knoten.getLinks(), liste);
            liste.add(knoten.getOrdbg());
            inOrder(knoten.getRechts(), liste);
         
        }
    }

    public List<Integer> preOrder() {
        List<Integer> liste = new ArrayList<>();
        preOrder(wurzel, liste);
        return liste;

    }

    public void preOrder(Knoten knoten, List<Integer> liste) {
        if (knoten != null) {
            liste.add(knoten.getOrdbg());
            preOrder(knoten.getLinks(), liste);
            preOrder(knoten.getRechts(), liste);
         
        }
    }

    public List<Integer> postOrder() {
        List<Integer> liste = new ArrayList<>();
        postOrder(wurzel, liste);
        return liste;

    }

    public void postOrder(Knoten knoten, List<Integer> liste) {
        if (knoten != null) {
            postOrder(knoten.getLinks(), liste);
            postOrder(knoten.getRechts(), liste);
            liste.add(knoten.getOrdbg());
        
        }
    }
    public List<Integer> levelOrder() {
        List<Integer> liste = new ArrayList<>();
        levelOrder(wurzel, liste);
        return liste;

    }

    public void levelOrder(Knoten knoten, List<Integer> liste) {
        if (knoten != null) {
            postOrder(knoten.getLinks(), liste);
            postOrder(knoten.getRechts(), liste);
            liste.add(knoten.getOrdbg());
        
        }
    }
   
}
 

httpdigest

Top Contributor
Für eine breadth-first Traversierung eines Baumes benötigst du eine Queue-Datenstruktur und kannst einen iterativen Algorithmus bauen. In die Queue fügst du am Anfang den Root-Knoten ein und gibst ihn aus (bzw. fügst ihn in deine Ergebnisliste ein). Dann lässt du eine Schleife laufen solange wie die Queue nicht leer ist. In jeder Schleifeniteration holst du dir den Knoten am Anfang der Queue und für jeden seiner Kinder fügst du das Kind hinten in die Queue ein und gibst das Kind aus. Das war's.
 

Lights

Mitglied
also ich bekomme das leider irgendwie nicht hin, muss ich mir dafür selber noch eine Queue klasse schreiben oder reicht dafür Java.util.Queue ?
 

Lights

Mitglied
okey danke, bin mittlerweile soweit an der Stelle
Java:
 public void levelOrder(Knoten knoten, List<Integer> liste) {
        Queue<Integer> queue = new LinkedList<Integer>();
        queue.add(knoten.getOrdbg());
        liste.add(knoten.getOrdbg());
      
        while (queue.isEmpty() == false)
        {
          
        }
      
    }

Wobei ich mir nicht sicher bin ob oben knoten.getOrdbg() auch die Root ist und was in die While schleife kommt habe ich leier auch nicht richtig verstanden

Habe leider vorher nie mit Queues gerabeitet und musste mir dass jetzt erst kurz alles anlesen
 

httpdigest

Top Contributor
Was ist denn ganz konkret genau das Problem, wo kommst du nicht weiter?
Es geht ja jetzt nur noch hierum: "In jeder Schleifeniteration holst du dir den Knoten am Anfang der Queue und für jeden seiner Kinder fügst du das Kind hinten in die Queue ein und gibst das Kind aus."
 

Lights

Mitglied
ganz genau, würde jetzt mit Queue.element oder .peek den erste Wert aus der Queue holen, weiß aber nicht ganu was ich damit machen soll bzw wohin ich den speichern soll, und von "
für jeden seiner Kinder fügst du das Kind hinten in die Queue ein und gibst das Kind aus." verstehe ich zwar den Sinn hab aber kein Plan wie ich das im Code umsetzten soll das es ja nicht mit getLinks oder getRechts funktioniert
 

Lights

Mitglied
bin grade völlig raus, hatte mir gedacht dass das nicht geht weil ja bei der Level Order jede "Ebene" einzelnd abgearbeitet wird, aber hastschon recht es müsste damit eigentlich auch gehen.

Stimmt den das mit .peek / .element und was mache ich dann mit dem Wert ?
 

Lights

Mitglied
Achso, ich hatte "rausholen" vorhin falsch verstanden, also geht es nur darum das der oberste Wert entfertn wird und in die Liste eingetragen wird oder ?

zudem versuche ich jetzt die Kinder mit Queue.add() hinzuzufügen, aber Queue.add(knoten.getLinks) funktioniert leider wirklich nicht
 

Lights

Mitglied
Java:
 public void levelOrder(Knoten knoten, List<Integer> liste) {
        Queue<Integer> queue = new LinkedList<Integer>();
        queue.add(knoten.getOrdbg());
        liste.add(knoten.getOrdbg());
      
        while (queue.isEmpty() == false)
        {
          
          int knoten1 = queue.remove();
          liste.add(knoten1);
          queue.add(knoten.getLinks());
           
        }
      
    }

Das funktioniert leider nicht dar getLinks bzw. Links vom Typ Knoten ist und kein int, dar Queue.add einen int erwartet
 

Lights

Mitglied
Stimmt, hatte ich so weil ich es am Anfang noch aus der Liste gecopied hatte, das geht jetzt natürlich auch, aber getOrdbg für die Wurzel funktioniert dann nicht mehr da es sich dabei um einen int handelt
 

httpdigest

Top Contributor
Du musst zwischen den Daten in der Queue (deine Knoten) und dem, was du in deine Ergebnisliste füllen willst (der "payload" eines Knotens, also ein Integer) unterscheiden. Wenn du den Knoten in deine Ergebnisliste hinzufügst, musst du selbstverständlich dann eben nicht den Knoten, sondern seinen Payload hinzufügen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D spezifische Knoten in einem Baum zählen Java Basics - Anfänger-Themen 9
HelpInneed Baum ausgeben (aber mal anders) Java Basics - Anfänger-Themen 3
G AVL-Baum Java Basics - Anfänger-Themen 1
G Rot-Schwarz-Baum Java Basics - Anfänger-Themen 8
L Baum aus Integer Liste erstellen Java Basics - Anfänger-Themen 0
CptK Interface Baum visualisieren Java Basics - Anfänger-Themen 37
CptK Best Practice Merge-Sort als Baum darstellen Java Basics - Anfänger-Themen 3
E Baum pfadweise durchlaufen Java Basics - Anfänger-Themen 11
O Naives links rechts einfügen in ADT Baum Java Basics - Anfänger-Themen 8
L Rekursion im Baum Java Basics - Anfänger-Themen 9
L Baum Knoten zählen Java Basics - Anfänger-Themen 6
L B+Baum innere Knoten erstellen Java Basics - Anfänger-Themen 3
D B-Baum einfügen und löschen Java Basics - Anfänger-Themen 2
F Aufgabe Rekursion Binärer Baum Java Basics - Anfänger-Themen 15
D Werte AVL-Baum löschen Java Basics - Anfänger-Themen 2
M Binären Baum Kinder setzen Java Basics - Anfänger-Themen 12
U 2-3-4 Baum Top-Down Java Basics - Anfänger-Themen 4
U 2-3-4 Baum Top-Down Java Basics - Anfänger-Themen 0
J Überprüfen, ob eine 2D Matrix ein Baum ist Java Basics - Anfänger-Themen 5
R Baum erzeugen Java Basics - Anfänger-Themen 61
B Baum Traversierung Postorder Java Basics - Anfänger-Themen 6
B OOP Über einen AVL-Baum iterieren (NullPointer) Java Basics - Anfänger-Themen 5
A Voller Baum Java Basics - Anfänger-Themen 7
S n-ärer Baum Java Basics - Anfänger-Themen 6
O Unterschied Baum <-> Automat Java Basics - Anfänger-Themen 2
K Tiefen- und Breitensuche beim Baum durch Stack und Warteschlange Java Basics - Anfänger-Themen 1
C kompletter baum Java Basics - Anfänger-Themen 2
M Collections Iterator und generischer Baum Java Basics - Anfänger-Themen 0
M Baum Code kurze frage ... Java Basics - Anfänger-Themen 6
D Ein Objekt in einem Baum finden und ausgeben. Java Basics - Anfänger-Themen 4
K Rot-Schwarz-Baum min und max-Tiefe Java Basics - Anfänger-Themen 1
A min() Methode Baum Java Basics - Anfänger-Themen 1
J Baum rekursiv durchlaufen Java Basics - Anfänger-Themen 2
J Baum Knoten löschen Java Basics - Anfänger-Themen 10
T Baum mit Turtle zeichnen Java Basics - Anfänger-Themen 2
Screen 2,4 Baum Frage Java Basics - Anfänger-Themen 6
T Rot-schwarz Baum Problem Java Basics - Anfänger-Themen 3
A Rekursion in Baum und ArrayList als Rückgabe Java Basics - Anfänger-Themen 2
P Pythagoras Baum - Berechnung der Punkte Java Basics - Anfänger-Themen 9
C 2-3 Baum Java Basics - Anfänger-Themen 6
H Baum Java Basics - Anfänger-Themen 4
L Rot Scharz Baum von Binärbaum erben Java Basics - Anfänger-Themen 9
B Baum > Baum-Swing Java Basics - Anfänger-Themen 4
L eigenen Baum schreiben Java Basics - Anfänger-Themen 5
Luk10 Anzahl der Knoten in einem Baum ausgeben! Java Basics - Anfänger-Themen 6
T Array in einen Baum zu überführen Java Basics - Anfänger-Themen 3
S Das reinschreiben einer Klasse in den Baum Java Basics - Anfänger-Themen 6
H B-Baum: Knoten Position als Parameter oder als Variable im Objekt? Java Basics - Anfänger-Themen 4
A Baum mit geometricfigur Werte Java Basics - Anfänger-Themen 6
D Datentypen Einfügen im RotSchwarz Baum Java Basics - Anfänger-Themen 2
F FileSystem in Baum darstellen/wurzel festlegen Java Basics - Anfänger-Themen 3
G List als Rückgabewert einer rekursiven Methode (Baum) Java Basics - Anfänger-Themen 3
I Baum graphisch darstellen Java Basics - Anfänger-Themen 2
P Binärer Baum mit Composite-Entwurfsmuster Java Basics - Anfänger-Themen 2
L Baum Swing AVL Java Basics - Anfänger-Themen 4
Binary.Coder 2-3-4 Baum vs. (2,4) Baum Java Basics - Anfänger-Themen 2
ModellbahnerTT Ab-Baum Applet Java Basics - Anfänger-Themen 3
P Baum-Menü in Java Java Basics - Anfänger-Themen 5
H Baum Java Basics - Anfänger-Themen 11
G AVL Baum Java Basics - Anfänger-Themen 20
J Baum spiegeln Java Basics - Anfänger-Themen 7
N 2-3 Baum, Einfügen Java Basics - Anfänger-Themen 5
G Rekursion mit Return - Baum durchlaufen Java Basics - Anfänger-Themen 4
G Baum Datenstruktur Java Basics - Anfänger-Themen 2
V Baum mit log n Aufwand für Einfügen und Löschen und. Java Basics - Anfänger-Themen 5
H Tiefensuche im binären Baum Java Basics - Anfänger-Themen 2
P Problem mit Darstellung im Baum Java Basics - Anfänger-Themen 4
G Binärer Baum Java Basics - Anfänger-Themen 3
M Binärer Baum Tiefe Java Basics - Anfänger-Themen 14
G universeller baum Java Basics - Anfänger-Themen 13
G Baum testen Java Basics - Anfänger-Themen 20
B Array To Baum Java Basics - Anfänger-Themen 2
B Baum to Array Java Basics - Anfänger-Themen 17
H Löschen in einem binären Baum führt zu einem StackOverflow Java Basics - Anfänger-Themen 2
L Binären Baum speichern Java Basics - Anfänger-Themen 6
R Pythagoras-Baum Java Basics - Anfänger-Themen 5
W Baum durchlaufen Java Basics - Anfänger-Themen 3
T binärer Baum Java Basics - Anfänger-Themen 3
G eine Knoten aus einem Baum löschen. [SOLVED] Java Basics - Anfänger-Themen 7
P allg. Baum aus Liste Java Basics - Anfänger-Themen 2
J String in binären Baum umwandeln Java Basics - Anfänger-Themen 7
R binärer Baum Java Basics - Anfänger-Themen 2
F Abstrakte Klasse Baum Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben