Binärbaum/Implementierung

Nirvana

Aktives Mitglied
Hallo, also wir hatten in Vorlesung kurz Binärbäume.
Die Theorie habe ich intus aber die Implementierung bereitet Probleme.
Ich will selbst eine Klasse für eien Binärbaum entwickeln. Jeweils methoden schreiben für die tiefe, größe eine knotens sowie höhe eines baumes. Bis es aber zu dem kommt muss ich mal das Grundgerüst haben.


Zuerst habe ich Klasse Knoten mithilfe der Generizität formuliert mit Typparameter T:
Java:
public class Knoten<T> {

    public Knoten<T> links;
    public Knoten<T> rechts;
    public T inhalt;

    public Knoten(T elem){
        inhalt = elem;
        links = null;
        rechts = null;
    }
    public Knoten(T elem, Knoten<T> links, Knoten<T> rechts){
        inhalt = elem;
        this.links = links;
        this.rechts = rechts;
    }
}
Nun Klasse BinaerBaum erstellt:
Java:
public class BinaerBaum<T>  {
    public Knoten<T> wurzel;
    public Binaerbaum(){
   
    }
    public Binaerbaum(Knoten<T> wurzel){
        this.wurzel = wurzel;
    }
}


Nun kommt der Fehler bei Klasse BinaerBaum, zeile 3 und 6: invalid Method declaration.
Aber was gebe ich als Rückgabewert an=?
 
G

Gonzo17

Gast
Das ist case senstitive, also schreib BinearBaum und dann sollte es klappen. Sollen ja Konstruktoren sein, aber deine IDE denkt es wären Methoden wegen der unterschiedlichen Schreibweise und daher fehlt der Rückgabewert.
 

Nirvana

Aktives Mitglied
Hallo

Danke Gonzo17.
Um weiterarbeiten zu können(Methoden für Größe,Tiefe,Höhe), welche Methoden muss ich dafür vorher noch implementieren?
Ich bin noch ziemlicher Anfänger und mir wäre geholfen wenn ich wüsste was ich mir nun als nächtes für Gedanken machen sollte.

LG
 
B

buzz!dev

Gast
Um mit dem Baum sinnvoll arbeiten zu können, sollte er die folgenden Methoden haben:
Java:
public T getRoot();
public BinaerBaum<T> getLeft();
public BinaerBaum<T> getRight();
public boolean isEmpty();

@PatrickO: Binärbaum und binärer Suchbaum sind nicht das gleiche.
 

Nirvana

Aktives Mitglied
Ich krieg das leider nicht ganz hin. Internetrecherche bringt mich auch nur auch die Suchbäume.

buzz!dev, vlt könntest du mir das bei einer Methode zeigen.
Hast du absichtlich nie einen Parameter in die Methoden verwendet?


Java:
public T getRoot(Binaerbaum<T>);{
return wurzel
}
soll die Wurzel des Binärbaums ausgeben. Ist also der Parameter der BinaerBaum?

Java:
public BinaerBaum<T> getLeft(Knoten<T>);

public BinaerBaum<T> getRight(Knoten<T>)
Hier sind die Parameter die Knoten. Aber wie soll in den Inhalt des rechten/linken Knotens ausgeben?
 
H

hüteüberhüte

Gast
Hier sind die Parameter die Knoten. Aber wie soll in den Inhalt des rechten/linken Knotens ausgeben?

Eigentlich rufst du auf dem jeweiligen Knoten getLeft/getRight auf. Für den Inhalt gibt's wieder 'ne extra Methode.

Vor allem interessant ist die Traversierung ( Binärbaum ? Wikipedia ):
  • pre-order (auch depth-first) oder Hauptreihenfolge (auch Tiefensuche) (W–L–R): Zuerst wird die Wurzel (W) betrachtet und anschließend der linke (L), schließlich der rechte (R) Teilbaum durchlaufen.
  • post-order oder Nebenreihenfolge (L–R–W): Zuerst wird der linke (L), dann der rechte (R) Teilbaum durchlaufen und schließlich die Wurzel (W) betrachtet.
  • in-order oder symmetrische Reihenfolge (L–W–R): Zuerst wird der linke (L) Teilbaum durchlaufen, dann die Wurzel (W) betrachtet und schließlich der rechte (R) Teilbaum durchlaufen.
  • reverse in-order oder anti-symmetrische Reihenfolge (R–W–L): Zuerst wird der rechte (R) Teilbaum durchlaufen, dann die Wurzel (W) betrachtet und schließlich der linke (L) Teilbaum durchlaufen.
  • level-order (auch breadth-first, deutsch Breitensuche): Beginnend bei der Baumwurzel werden die Ebenen von links nach rechts durchlaufen.

Java:
public class Node<T> {
    public T value; // eigentlich private
    public Node<T> left;
    public Node<T> right;

    public Node(T value, Node<T> left, Node<T> right) {
        this.value = value;
        this.left = left;
        this.right = right;
    }
}

Java:
public abstract class AbstractTraverser<T> {
    public void inOrder(Node<T> node) {
        if (node != null) {
            inOrder(node.left);
            toDo(node);
            inOrder(node.right);
        }
    }

    public abstract void toDo(Node<T> node);
}

Java:
public class Main {
    public static void main(String[] args) {
        Node<String> node = new Node<String>("vier",
                new Node<String>("zwei",
                new Node<String>("eins", null, null),
                new Node<String>("drei", null, null)),
                new Node<String>("sechs",
                new Node<String>("fünf", null, null),
                new Node<String>("sieben", null, null)));
        new AbstractTraverser<String>() {

            @Override
            public void toDo(Node<String> node) {
                System.out.println(node.value);
            }
        }.inOrder(node);
    }
}

Code:
eins
zwei
drei
vier
fünf
sechs
sieben

:)
 
Zuletzt bearbeitet von einem Moderator:

Nirvana

Aktives Mitglied
Danke für den Post..
Könntest du mir die Klasse public abstract class AbstractTraverser<T> erklären? Ich verstehe nicht was sie bzw. ihre methoden machen.

Wohin ist meine Klasse verschwunden mit der die Wurzelgesetzt wird?
LG
 
H

hüteüberhüte

Gast
Könntest du mir die Klasse public abstract class AbstractTraverser<T> erklären? Ich verstehe nicht was sie bzw. ihre methoden machen.

Darin könntest du Methoden wie

Java:
    public void inOrder(Node<T> node) {
        if (node != null) {
            inOrder(node.left);
            toDo(node);
            inOrder(node.right);
        }
    }

    public void preOrder(Node<T> node) {
    }

    public void postOrder(Node<T> node) {
    }

    public void breadthFirst(Node<T> node) {
    }

unterbringen. Die Methoden durchschreiten (Traverser=der Durchquerer) beginnend bei einem Knoten den Baum. Was mit den einzelnen Knoten geschehen soll, ist implementierungsabhängig

Wohin ist meine Klasse verschwunden mit der die Wurzelgesetzt wird?

Wurzel-Knoten und richtiges Einfügen ist wieder so eine Sache. Soll der Baum geordnet sein, soll er höhenbalanciert sein, sollen Elemente zufällig eingefügt werden usw. Das musst du dir vorher überlegen, dann in eine extra Klasse schreiben

Beispielsweise:
Java:
public class Tree<T> {

    private Node<T> root;

    public Node<T> getRoot() {
        return root;
    }

    public void insert(T t) {
        if (root == null) {
            root = new Node<T>(t, null, null);
        } else {
            ins(root, t);
        }
    }

    private void ins(Node<T> n, T t) {
        if (Math.random() < 0.5) {
            if (n.left == null) {
                n.left = new Node<T>(t, null, null);
            } else if (n.right == null) {
                n.right = new Node<T>(t, null, null);
            } else {
                ins(n.left, t);
            }
        } else {
            if (n.right == null) {
                n.right = new Node<T>(t, null, null);
            } else if (n.left == null) {
                n.left = new Node<T>(t, null, null);
            } else {
                ins(n.right, t);
            }
        }
    }
}

Es gibt auch einen Beweis, dass ein zufällig erstellter Baum nicht in der Höhe "ausufert" :)

Über ein Danke würd ich mich auch mal freuen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Y Wie greift man auf die Knoten in einem Binärbaum zu? Java Basics - Anfänger-Themen 5
T Binärbaum-Suche Implementation Java Basics - Anfänger-Themen 6
A Binärbaum rekursiv durchsuchen und Referenz zurückgeben Java Basics - Anfänger-Themen 4
D Werte aus einem BinärBaum in einem Array speichern Java Basics - Anfänger-Themen 1
D Binärbaum Blätter finden und Ausgeben Java Basics - Anfänger-Themen 22
O BinärBaum einfügen Java Basics - Anfänger-Themen 13
E Erste Schritte Testklasse Binärbaum Java Basics - Anfänger-Themen 10
void19 Methoden Binärbaum Inorder Traversierung in Array speichern Java Basics - Anfänger-Themen 1
A Größten Eintrag aus Binärbaum löschen Java Basics - Anfänger-Themen 4
L Ganzen BinärBaum ausgeben? Java Basics - Anfänger-Themen 3
L Binärbaum (Stammbaum) Java Basics - Anfänger-Themen 8
S Binärbaum in PreOrder in ArrayList speichern Java Basics - Anfänger-Themen 0
J Methoden Binärbaum, Traversierung in Array speichern Java Basics - Anfänger-Themen 18
K BinärBaum Java Basics - Anfänger-Themen 4
J Max. Anzahl von Knoten im Binärbaum Java Basics - Anfänger-Themen 3
M Werte der Knoten in Binärbaum addieren (iterativ) Java Basics - Anfänger-Themen 6
C Binärbaum mit grafischer Ausgabe Java Basics - Anfänger-Themen 0
J Binärbaum formatiert ausgeben. Java Basics - Anfänger-Themen 7
P Listen sortieren mit Binärbaum gibt keine Ausgabe ab 10000 Integern Java Basics - Anfänger-Themen 14
E Binärbaum - von rekursiv zu iterativ Java Basics - Anfänger-Themen 10
W Größtes Element im unsortierten Binärbaum Java Basics - Anfänger-Themen 7
N Generischer Binärbaum - löschen Java Basics - Anfänger-Themen 1
M Binärbaum mit parent-Zeigern Java Basics - Anfänger-Themen 1
B Methoden BinärBaum als String Knoten löschen Java Basics - Anfänger-Themen 5
S Binärbaum kopieren Java Basics - Anfänger-Themen 6
B Binärbaum mit java implementieren! Java Basics - Anfänger-Themen 5
D Binärbaum Suche Java Basics - Anfänger-Themen 5
D Binärbaum probleme Java Basics - Anfänger-Themen 4
P Binärbaum - Primärschlüssel Java Basics - Anfänger-Themen 3
X Fehler Binärbaum Java Basics - Anfänger-Themen 6
PaulG Fragen zu Binärbaum Java Basics - Anfänger-Themen 21
P Binärbaum Ordnungsproblem Java Basics - Anfänger-Themen 8
P Generischer Binärbaum (compareTo Frage) Java Basics - Anfänger-Themen 4
P einen binärbaum implementieren Java Basics - Anfänger-Themen 4
M Binärbaum - Problem bei Knoten anhängen / löschen Java Basics - Anfänger-Themen 5
B Binärbaum höhe herausfinden Java Basics - Anfänger-Themen 12
L Rot Scharz Baum von Binärbaum erben Java Basics - Anfänger-Themen 9
S Klassen Aufgabe: Binärbaum überprüfen Java Basics - Anfänger-Themen 16
S Binärbaum Java Basics - Anfänger-Themen 9
S Variable Parameterliste in Binärbaum Java Basics - Anfänger-Themen 2
N BinärBaum Hilfestellung Java Basics - Anfänger-Themen 8
S Binärbaum prüfen, ob sortiert oder unsortiert Java Basics - Anfänger-Themen 6
W Binärbaum zahlen addieren Java Basics - Anfänger-Themen 7
S Binärbaum - Klasse Knoten - Methode Suchen Java Basics - Anfänger-Themen 5
S Binärbaum Java Basics - Anfänger-Themen 7
I Binärbaum Java Basics - Anfänger-Themen 5
S Bitte um Hilfe beim unsortierten Binärbaum!! Java Basics - Anfänger-Themen 6
J Binärbaum getSize Java Basics - Anfänger-Themen 4
P Fragen zum Binärbaum Java Basics - Anfänger-Themen 3
S Binärbaum implementieren Java Basics - Anfänger-Themen 6
K Tiefe im Binärbaum Java Basics - Anfänger-Themen 2
G generischer binärbaum Java Basics - Anfänger-Themen 9
G Binärbaum und Wrapperklassen Java Basics - Anfänger-Themen 6
F Binärbaum codieren. Codeproblem! Java Basics - Anfänger-Themen 4
D rekursion im binärbaum Java Basics - Anfänger-Themen 11
0 Binärbaum als verkettete Liste Java Basics - Anfänger-Themen 3
T Binärbaum - noch ein "klitzekleiner Fehler" Java Basics - Anfänger-Themen 4
B Binärbaum auf Vollständigkeit prüfen Java Basics - Anfänger-Themen 15
G Frage zur einfügen in einem Binärbaum Java Basics - Anfänger-Themen 21
G Binärbaum grafisch darstellen Java Basics - Anfänger-Themen 4
ruutaiokwu JRE-/JDK-unabhängige PBKDF2WithHmacSHA512-Implementierung Java Basics - Anfänger-Themen 16
V Hilfe bei Implementierung einer boolean Methode Java Basics - Anfänger-Themen 6
K Fehler bei der Implementierung Java Basics - Anfänger-Themen 6
J Implementierung gcd();square() Java Basics - Anfänger-Themen 98
J Implementierung von Observer und Singleton-Pattern Java Basics - Anfänger-Themen 9
A Implementierung von String toString methode() Java Basics - Anfänger-Themen 4
G Projekt architektur (implementierung) Java Basics - Anfänger-Themen 3
M Implementierung einer getNextId Methode Java Basics - Anfänger-Themen 5
J Implementierung Listen-ADT Java Basics - Anfänger-Themen 131
J Implementierung eines Zustandsdiagramms Java Basics - Anfänger-Themen 19
I GenericQueue / Implementierung als Ringspeicher Java Basics - Anfänger-Themen 4
MiMa Log4j2 implementierung Java Basics - Anfänger-Themen 4
S Interface Interface und seine Implementierung Java Basics - Anfänger-Themen 5
G Array implementierung Java Basics - Anfänger-Themen 23
J ANTLR Installierung und Implementierung Java Basics - Anfänger-Themen 2
E Hilfe bei Implementierung von Methoden Java Basics - Anfänger-Themen 10
S SkipList Implementierung Java Basics - Anfänger-Themen 1
J Methoden Suche effiziente Implementierung für eine Methode Java Basics - Anfänger-Themen 3
J Interface Probleme bei der Implementierung Java Basics - Anfänger-Themen 1
E hashCode implementierung Java Basics - Anfänger-Themen 9
S Implementierung der Klasse Konto und Nutzung bereits vorhandener Klassen Java Basics - Anfänger-Themen 7
H Implementierung eines Interfaces erweitern Java Basics - Anfänger-Themen 13
O Generics - Implementierung Java Basics - Anfänger-Themen 7
A Hilfestellung zur Implementierung des Gaußsches Eliminationsverfahren Java Basics - Anfänger-Themen 4
B OOP Implementierung eines Heaps Java Basics - Anfänger-Themen 13
K Bucketsort Implementierung Java Basics - Anfänger-Themen 0
K Mergesort Fehler in der Implementierung Java Basics - Anfänger-Themen 2
K Quicksort Fehler in der Implementierung Java Basics - Anfänger-Themen 2
S Klassen Klassendiagramm Implementierung? Java Basics - Anfänger-Themen 5
J Bucketsort Implementierung Java Basics - Anfänger-Themen 0
C Stack - listenbasierte Implementierung Java Basics - Anfänger-Themen 4
N Was bedeutet "Implementierung vor dem Client verbergen" bei Design Patterns? Java Basics - Anfänger-Themen 2
T Collections LinkedList<LinkedList<T>> - Implementierung Java Basics - Anfänger-Themen 10
F Implementierung von Interfaces -> Problem mit main Java Basics - Anfänger-Themen 12
D Resourcebundle implementierung Java Basics - Anfänger-Themen 2
M Implementierung des Knuth-Morris-Pratt-Algorithmus Java Basics - Anfänger-Themen 0
Q Implementierung von Listenern Java Basics - Anfänger-Themen 4
B Klassen Hilfe bei Implementierung Java Basics - Anfänger-Themen 5
N Compiler-Fehler Comparable / compareTo implementierung Java Basics - Anfänger-Themen 2
S Fragen zur Implementierung eines Binärbaums Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben