n-ärer Baum

Stormi1234

Mitglied
Hallo,

ich hoffe ich bin hier richtig.
Ich versuche einen Baum zu implementieren, welchem ich die Höhe und den Verzweigungsfaktor angebe, und dieser sich dann mit zufälligen nummern erstellt (erstmal zweitrangig).
Allerdings komme ich nun einfach nicht weiter.
Hier mein momentaner Versuch:
Java:
public Tree(int b, int h) {   
    for (int i = 0; i <= h; i++) {
            insert();
        }

    }

    public void insert() {
        if (root == null) {
            root = new Node(t);
            root.setHeight(h);
        } else {
            insert(root);
        }

    }

    private void insert(Node parent) {
        for(int i=0;i<b;i++){
            Node child = new Node(t+1);
            child.setHeight(h-1);
            parent.addDaughter(child);   
           
            if(child.getHeight()!=0){
            insert(child);
            }

Ich bekomme einen StackOverflowError.

Vielen Dank für eure Hilfe.
 

Stormi1234

Mitglied
Hier meine main
Code:
public class Main {

    public static void main(String[] args) {
       
        Scanner scanner = new Scanner(System.in);
        System.out.println("Provide Branching Factor");
        int b= scanner.nextInt();
        System.out.println("Provide height");
        int h= scanner.nextInt();
        System.out.println("Provide Approximation");
        int approx= scanner.nextInt();
       
        System.out.println("Values provided:"+b+" , "+ h + " , " + approx);
       
        Tree newTree = new Tree(b,h,approx);
       
       
    }

}

Die Node Class:
Code:
public class Node {
    int e;
    private ArrayList<Node> daughter;
    int height;

   
    public Node(int e){
        this.daughter = new ArrayList<Node>();
        this.e = e;
    }
   
    public void addDaughter(Node childNode){
        this.daughter.add(childNode);
    }

    @Override
    public String toString() {
        return "Node [e=" + e + " height: " + height + ", daughter= " + daughter + "]\n";
    }

    public void setHeight(int h){
        this.height=h;
    }
   
    public int getHeight(){
        return this.height;
    }
   
}

Und die Tree Klasse:
Code:
public class Tree {
    public int b;
    public int h;
    public int approx;

    private Node root;
    public int t;
    private ArrayList<Node> tree;

    public Tree(int b, int h, int approx) {
        super();
        this.b = b;
        this.h = h;
        this.approx = approx;
        root = null;
        tree = new ArrayList<Node>();

        // Random T between -250 and +250
        Random randomGenerator = new Random();
        t = (randomGenerator.nextInt(500) - 250);

        for (int i = 0; i <= h; i++) {
            insert();
           
        }
        System.out.println(tree.toString());

    }

    public void insert() {
        if (root == null) {
            root = new Node(t);
            root.setHeight(h);
            tree.add(root);
   
        } else {
            insert(root);
        }

    }

    private void insert(Node parent) {
        for(int i=0;i<b;i++){
            int height=h-1;
            Node child = new Node(t+1);
            child.setHeight(height);
            parent.addDaughter(child);   
            tree.add(parent);
           
        }
    }

}

Alles etwas chaotisch.
 

Tarrew

Top Contributor
Also ich habs mal mit ein paar Werten durchgespielt und kriege nie einen StackOverflow. Bei welchen Werten passiert das denn bei dir?
 

Stormi1234

Mitglied
Hab zwischen erstem und zweitem Post etwas an der Tree Klasse verändert. In der letzteren ist ja garkeine Rekursion drin. Sorry.
Aber es tut ja auch nicht was es tun soll.
Denn ich müsste ja für jeden Kindsknoten wieder b viele Kindsknoten erstellen, bis zur Höhe h.
Eigentlich dürfte dass ja nicht so schwer sein. Aber ich stecke irgendwie fest.

Code:
private void insert(Node parent) {
        for(int i=0;i<b;i++){
            int height=h-1;
            Node child = new Node(t+1);
            child.setHeight(height);
            parent.addDaughter(child);  
            tree.add(parent);
           // Rekursiver Aufruf
           insert(child);
        }
    }
 

Tarrew

Top Contributor
Also ich habs mal kurz überflogen. Die Höhe des Baumes regelt sich ja eig. automatisch über die Rekursion. Deswegen solltest du die for-Schleife im Konstruktor nicht brauchen.

Außerdem willst du in der insert-Methode nicht jedes Kind zur tree-List hinzufügen. Jeder Knoten hat ja seine eigene Liste mit Kindern.

Hab das mal kurz angepasst:
Java:
import java.util.ArrayList;
import java.util.Random;

public class Tree {
    public int b;
    public int h;
    public int approx;

    private Node root;
    public int t;
    private ArrayList<Node> tree;

    public Tree(int b, int h, int approx) {
        super();
        this.b = b;
        this.h = h;
        this.approx = approx;
        root = null;
        tree = new ArrayList<Node>();

        // Random T between -250 and +250
        Random randomGenerator = new Random();
        t = (randomGenerator.nextInt(500) - 250);

        insert();

        System.out.println(tree.toString());

    }

    public void insert() {
        if (root == null) {
            root = new Node(t);
            root.setHeight(h);
            tree.add(root);

        }
        if(h>0){
            insert(root);
        }

    }

    private void insert(Node parent) {
        for (int i = 0; i < b; i++) {
            int height = parent.getHeight()-1;
            Node child = new Node(t + 1);
            child.setHeight(height);
            parent.addDaughter(child);
           
            // Rekursiver Aufruf
            if (height > 0) {
                insert(child);
            }
        }
    }

}

Es sah mir auf den ersten Blick relativ richtig aus. Aber ich kann diese Ausgabe schwer lesen und so spät kann ich mich eh schlecht konzentrieren ;)
 
Ä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
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
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