Binären Baum Kinder setzen

Maultäschle

Aktives Mitglied
Hey,
hab volgendes Problem:
Wenn ich neue knoten hinzufüge, dann bezieht der sich immer auf den Vorgänger, daher kann es sein, dass nicht immer die Zhlen im linken Teilbaum echt kleiner als die Wurzel sind.
Code:
    public void setRechtesKind(IBinaryTreeNode<T> rechts) {

        IBinaryTreeNode<T> wurzel = new BinaryTreeNode<T>();

        if (wurzel.getValue().compareTo(rechts.getValue()) > 0) {
            throw new IllegalArgumentException();
        } else if (wurzel.getValue().compareTo(rechts.getValue()) == 0) {
System.out.println("Gleicher Knotenwert!!!!!!");
        } else {
            this.rechts = rechts;
        }

    }
 

Maultäschle

Aktives Mitglied
Ging eigentlich ums Prinzip. Nicht so sehr um die Richtung. Naja, wenn ich zum Beispiel mit 37 anfange. Rechts Kind 38. Linkes Kind 35. Das rechte Kind vom linken Kind ist 40. Und dann wäre die linke Seite nicht mehr echt kleiner als die Wurzel
 

mrBrown

Super-Moderator
Mitarbeiter
Wie sollte denn die 40 überhaupt links eingeordnet werden?
Wenn man sie einfach dahin setzt, ohne den Regeln zu folgen, ist ja klar dass die Regeln nicht mehr gelten...
 

mrBrown

Super-Moderator
Mitarbeiter
Ja natürlich, das ist doch der Sinn des ganzen. Einen Binärbaum zu schreiben, der die nicht richtig einsortiert hat doch wenig Sinn...
 

Robat

Top Contributor
Eine Möglichkeit es zu machen wäre es in deiner Add Methode eine rekursive traverse Methode aufzrufen, die solange durch den Baum geht bis sie einen Platz gefunden hat wo sie das Element einfügen kann.
Als kleine Anregung vielleicht mal eine Art Pseudocode:

Code:
void add(Node node)
{
     IF root = null
         root = node;
     ELSE
         traverse(root, node);
}

void traverse(Node current, Node nodeToAdd)
{
    IF current.data < nodeToAdd.data
         IF current.left = nul
               current.left = nodeToAdd
         ELSE 
               traverse(current.left, nodeToAdd);
    ELSE IF current.data > nodeToAdd.data
          IF current.right = null
               current.right = null
          ELSE
                traverse(current.right, nodeToAdd);
}

Gruß Robert
 

Maultäschle

Aktives Mitglied
Hab es jetzt so gemacht, jedoch funktioniert es nicht. Findet ihr den Fehler?
Code:
    public void add(BinaryTreeNode<T> current) {
        if (root == null) {
            root = current;
        } else {
            traverse((BinaryTreeNode<T>) root, current);
        }
    }

    public void traverse(BinaryTreeNode<T> current, BinaryTreeNode<T> nodeToAdd) {
        if (current.getValue().compareTo(nodeToAdd.getValue()) > 0) {
            if (current.left == null) {
                current.left = nodeToAdd;
            } else {
                traverse((BinaryTreeNode<T>) current.left, nodeToAdd);

            }
        } else if (current.getValue().compareTo(nodeToAdd.getValue()) < 0) {
            if (current.right == null) {
                current.right = nodeToAdd;
            } else {
                traverse((BinaryTreeNode<T>) current.right, nodeToAdd);
            }
        } else {
            System.out.println("Do nothing");
        }
    }

    public static void main(String[] args) {
        BinaryTreeNode<Integer> neu = new BinaryTreeNode<Integer>();
        System.out.println(neu.getValue());
        neu.setValue(60);
        BinaryTreeNode<Integer> cuurent = new BinaryTreeNode<>();
        cuurent.setValue(42);
        neu.add(cuurent);
        neu.traverse(neu, cuurent);
        System.out.println(neu.getLeftChild());
 

stg

Top Contributor
Wie in deinen anderen Themen auch:
WAS funktioniert denn nicht? Wie äußert sich dieses "funktioniert nicht". Das soll hier kein Such- und Ratespiel für die anderen sein, sondern DU möchtest doch Hilfe haben.
 

Robat

Top Contributor
Ich glaube du hast den Sinn dieser traverse(BinaryTreeNode<T> current, BinaryTreeNode<T> nodeToAdd) im Zusammenspiel mit der add(BinaryTreeNode<T> current) noch nicht ganz verstanden.
Immer wenn du ein neues Element adden willst soll folgendes geschehen:
- Wenn der Baum leer ist, dann soll das Element das neue root-Element werden (geschieht bereits in deiner add Methode)
- Wenn der Baum nicht leer ist soll die traverse(..) Methode aufgerufen werden mit dem root Element und dem Element welches geadded werden soll (geschieht bereits in deiner add Methode)

Die traverse(..) sollst du aber niemals selber von außen aufrufen, schon gar nicht mit den Parametern die du momentan übergibst. Ziel der traverse(..) ist es ja, beim root Element anzufangen und dann so lange vorzudringen, bis es einen Platz findet wo das Element, welches hinzugefügt werden soll, rein passt. Du musst also einfach nur add() aufrufen um ein Element hinzuzufügen.

Kleine Frage am Rande:
BinaryTreeNode<Integer> neu = new BinaryTreeNode<Integer>();
...
BinaryTreeNode<Integer> cuurent = new BinaryTreeNode<>();
...
neu.add(cuurent);


Warum rufst du die add(..) über ein BinaryTreeNode<T> Element auf? Ein einzelnes Element braucht doch keine add Methode?
Die gehört eigentlich in die BinaryTree (oder wie auch immer die bei dir heißen mag) Klasse.

---

Ich muss @stg Recht geben.
Hab es jetzt so gemacht, jedoch funktioniert es nicht. Findet ihr den Fehler?
Ist keine Fehlerbeschreibung. Einfach 1, 2 Sätze (mit eventuellem StackTrace) die beschreiben was passiert und was passieren soll. Schon kann man damit arbeiten und vor allem schneller zu einer Lösung kommen ;)

Gruß Robert
 

Robat

Top Contributor
Okay, kurzes Minimalbeispiel:

Java:
public class BinaryTree
{
     private Node node;

     public BinaryTree() {
           node = null;
     }
   
     public void add(Node node)
     {
          // so wie besprochen
          ...
     }

     private void traverse(...)
     {
           // so wie besprochen
           ....
     }
}

public class Node
{
     // irgendeine Node Klasse
     private Node nodeLeft;
     private Node nodeRight;
     private int data;

     public Node(int data)
     {
           this.data = data;
     }
    ...
}

public class TestBinaryTree
{
     // irgendeine Klasse zum testen
     public static void main(String[] args)
     {
           BinaryTree tree = new BinaryTree();
      
            Node node1 = new Node(50);    // ---> sollte zum root Element werde
            Node node2 = new Node(25);    // ---> sollte zum leftNode des roots werden
            Node node3 = new Node(75);   // --> sollte zum rightNode des roots werden
            Node node4 = new Node(30);   // --> sollte zum rightNode von node2 werden
  
           tree.add(node1);
           tree.add(node2);        
           tree.add(node3);
           tree.add(node4);
     }
}

Vielleicht hilft dir das ja zu verstehen, was wir in den letzten Posts besprochen haben.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Tiefensuche im binären Baum Java Basics - Anfänger-Themen 2
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
J String in binären Baum umwandeln Java Basics - Anfänger-Themen 7
L Binären Bäume für beliebige Datentypen Java Basics - Anfänger-Themen 15
U Input/Output Elemente eines Binären Suchbaums ausgeben Java Basics - Anfänger-Themen 10
C Methoden Methode zu einem Binären Suchbaum Java Basics - Anfänger-Themen 8
L Indorder Traversierung eines binären Suchbaumes Java Basics - Anfänger-Themen 1
T Rekursiv Tiefe eines binären Suchbaums ermitteln Java Basics - Anfänger-Themen 22
T Algorithmus zur Überprüfung eines binären Suchbaums Java Basics - Anfänger-Themen 2
N Binären Suchbaum erstellen, nachzuvollziehen Java Basics - Anfänger-Themen 0
W binären Suchbaum Kantenanzahl Java Basics - Anfänger-Themen 3
K Datentypen Umwandlung einer Textfeldeingabe in einen binären Wert Java Basics - Anfänger-Themen 2
J Ebene eines binären Baumes Java Basics - Anfänger-Themen 3
N Tiefe im binären Suchbaum Java Basics - Anfänger-Themen 9
A OOP Binären Datenstrom in Datei schreiben Java Basics - Anfänger-Themen 4
E Alternativen zur binären Serialisierung ? Java Basics - Anfänger-Themen 9
N Rekursive Berechnung der Höhe eines binären Baumes Java Basics - Anfänger-Themen 4
G Pfadlänge eines binären Suchbaums Java Basics - Anfänger-Themen 4
G suchen und ersetzen in einer binären Datei Java Basics - Anfänger-Themen 4
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
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
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
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
R binärer Baum Java Basics - Anfänger-Themen 2
F Abstrakte Klasse Baum Java Basics - Anfänger-Themen 6
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben