Baum erzeugen

Lazyyy

Mitglied
Schon ein bisschen her das Thema:

Versuch ansonsten mal das:
Java:
public static ThreeNode createThree(int depth) {
        if (depth <= 0) {
            return null;
        }
    
        ThreeNode node = new ThreeNode();
        node.left = createThree(depth-1);
        node.middle = createThree(depth-1);
        node.right = createThree(depth-1);
    
        return node;
    }

Habe eine ähnliche aufgabe welche ich so Lösen kann .. wäre es möglich diese Lösung Schrittweise erläutert zu bekommen ?
was stellt hier die rekursion schritt für schritt an ^^?
 

mrBrown

Super-Moderator
Mitarbeiter
Habe eine ähnliche aufgabe welche ich so Lösen kann .. wäre es möglich diese Lösung Schrittweise erläutert zu bekommen ?
was stellt hier die rekursion schritt für schritt an ^^?
Ich versuchs mal...
Java:
public static ThreeNode createThree(int depth) {
        if (depth <= 0) { //wenn die zu erzeugende Tiefe 0 ist (also gar kein Baum erzeugt werden soll)
            return null;     // dann wird kein Baum zurückgegeben
        }
   
        //ansonsten:
        ThreeNode node = new ThreeNode(); //erstelle die Wurzel für den Baum
        node.left = createThree(depth-1);     //füllen den rechten Teil-baum. Dieser ist auch einfach nur ein Baum, nur mit geringerer Tiefe (einfach mal aufmalen, dann sieht man das 
        node.middle = createThree(depth-1); //gleiches für die anderen beiden Teilbäume
        node.right = createThree(depth-1);
   
        return node;
    }
 

Blender3D

Top Contributor
ThreeNode node = new ThreeNode(); //erstelle die Wurzel für den Baum
Hier wird nicht nur die Wurzel erzeugt, sondern jeder Knoten des Baumes.

was stellt hier die rekursion schritt für schritt an ^^?
Ich habe dir eine levelweise Printfuktion geschrieben, um den Baum zu visualisieren.
Java:
import java.util.Vector;

public class TreeNode {
    private final int value;
    private TreeNode left;
    private TreeNode middle;
    private TreeNode right;

    public TreeNode(int value) {
        this.value = value;
    }

    public TreeNode getLeft() {
        return left;
    }

    public TreeNode getMiddle() {
        return middle;
    }

    public TreeNode getRight() {
        return right;
    }

    public int getValue() {
        return value;
    }

    private static void getTreeStrings(TreeNode node, int level, Vector<String> str) {
        if (node == null)
            return;
        int size = str.size();
        String nodePrt = level < size ? str.get(level) : "Level " + level + "\t> ";
        nodePrt += node + "\t";
        if (level >= size)
            str.add(nodePrt);
        else
            str.set(level, nodePrt);
        if (node != null) {
            if (node.getLeft() != null)
                getTreeStrings(node.getLeft(), level + 1, str);
            if (node.getMiddle() != null)
                getTreeStrings(node.getMiddle(), level + 1, str);
            if (node.getRight() != null)
                getTreeStrings(node.getRight(), level + 1, str);
        }
    }

    /**
     * Prints tree in level order.
     *
     * @param node
     */
    public static void printTree(TreeNode node) {
        Vector<String> str = new Vector<String>();
        getTreeStrings(node, 0, str);
        for (String s : str)
            System.out.println(s);
    }

    public void setLeft(TreeNode left) {
        this.left = left;
    }

    public void setMiddle(TreeNode middle) {
        this.middle = middle;
    }

    public void setRight(TreeNode right) {
        this.right = right;
    }

    @Override
    public String toString() {
        return "[" + value + "]";
    }
}
Java:
public class start {
    public static int cnt = 0; // Counter um die Knoten zu Numerieren

    public static void main(String[] args) {
        TreeNode root = createThree(3);
        TreeNode.printTree(root); // gibt den erzeugten Baum levelweise aus
    }

    public static TreeNode createThree(int depth) {
        if (depth <= 0) // Wenn die Tiefe 0 ist, ist die gewünscht Höhe des Baumes erreicht und es wird
            return null; // kein weiterer Knoten erzeugt.

        // Erstelle den aktuellen Knoten. Falls depth gleich dem Wert des Aufrufers
        // außerhalb der Rekursion ist ( hier 3 ), handelt es sich um die Wurzel
        TreeNode node = new TreeNode(cnt++); // aktueller Knoten wird mit einer laufen Nummer versehen

        // setze die Knoten für alle Äste ( links, mitte ,rechts ) durch den rekursiven
        // Aufruf mit einer um 1 verminderten Tiefe. Das geschieht für jeden Ast solange
        // bis die obige Abruchbedigung Tiefe <= 0 erreicht ist.
        node.setLeft(createThree(depth - 1)); // setzte die Verbindung nach Links
        node.setMiddle(createThree(depth - 1)); // setzte die Verbindung zur Mitte
        node.setRight(createThree(depth - 1));// setzte die Verbindung nach Rechts

        return node; // Gib den aktuell erzeugten Konten zurück. Bei der Rückkehr zum urprünlichen
                        // Aufrufer handelt es sich dann um die Wurzel.
    }
}

Die Ausgabe:
upload_2018-6-6_23-23-37.png
Hier wurde die Funktion
Java:
createTree ()
13 x aufgerufen. Jedes Level das noch nicht die gewünschte Höhe erreicht hat erzeugt ein tieferliegendes Level mit 3 mal soviel Knoten. ( Links, Mitte, Rechts ). Man kann auch sehr gut sehen, wie die Knoten sich den Levels zuordnen. :rolleyes:

Vielleicht hilft Dir das etwas weiter, um die Rekursion zu verstehen. ;)
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
Hier wird nicht nur die Wurzel erzeugt, sondern jeder Knoten des Baumes.
Da jeder Knoten eines Baumes auch gleichzeitig Wurzel des Teilbaumes ist, und da immer nur ein Teilbaum erzeugt wird, wird da auch immer die Wurzel erzeugt. Und in dem Methodenkontext ist nie bekannt, ob es Wurzel des Gesamtbaumes ist, oder nicht ;)
 

Meniskusschaden

Top Contributor
Hier wird nicht nur die Wurzel erzeugt, sondern jeder Knoten des Baumes.
Das ist ja kein Widerspruch, denn es ist immer die Wurzel des Baumes, der mit diesem Aufruf von createTree() erzeugt wird. Wenn dieser Baum gleichzeitig Teilbaum eines übergeordneten Baumes ist, ist es aus dessen Sicht natürlich ein untergeordneter Knoten, bleibt aber dennoch die Wurzel des Teilbaums.
 

Lazyyy

Mitglied
Vielen Dank für die Antworten.
Bin das Ganze mit einem Blatt Papier zusätzlich noch einmal durch gegangen und eigtl lässt es sich gut nachvollziehen. Mal sehen ob ich die Rekursion auf ähnliche aufgaben übertragen kann.
Ansonsten schreibe ich hier noch einmal rein ^^.
 
Ä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 Traversierungsverfahren Baum: LevelOrder Java Basics - Anfänger-Themen 17
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
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
W Javadoc HTML erzeugen mit allen dependency Java Basics - Anfänger-Themen 11
J Delay erzeugen, ohne Programm zu blockieren Java Basics - Anfänger-Themen 7
Say abstract class und Objekt erzeugen - Dringend Hilfe Java Basics - Anfänger-Themen 10
BeginnerJava String mit vorgegebener Länge und Buchstaben erzeugen/ mit Leerstellen Java Basics - Anfänger-Themen 8
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
H Artefact mit Bild erzeugen Java Basics - Anfänger-Themen 11
E Rekursiv Objekte erzeugen - geht das? Java Basics - Anfänger-Themen 2
F Aus eingelesener Datei korrekt Objekte erzeugen Java Basics - Anfänger-Themen 5
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
C Runnable Jar-File erzeugen Java Basics - Anfänger-Themen 14
W Mehrfach das gleiche Attribut für ein Objekt erzeugen (mit verschiedenen Werten) Java Basics - Anfänger-Themen 2
Lena_2611 Vergleich von Array1 Index mit Array2 Wert und erzeugen eines neues Arrays Java Basics - Anfänger-Themen 8
C Instanzen, wann muss ich Instanzen erzeugen & wo?) Java Basics - Anfänger-Themen 23
S Erzeugen einer eindeutigen ID Java Basics - Anfänger-Themen 2
E Objekt durch Benutzer über Konsole erzeugen - Java Java Basics - Anfänger-Themen 3
L Simples Spielfeld erzeugen Java Basics - Anfänger-Themen 1
G Anklickbaren Text erzeugen Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben