Trinärbaum erzeugen


regtan

Grünschnabel
#1
Hallo ich versuche eine Trinärbaum zu erzeugen aber immer noch ohne Erfolg. Kann jemand mir helfen??
Danke!
 
Zuletzt bearbeitet von einem Moderator:

regtan

Grünschnabel
#3
Ich verstehe irgendwie wo das Problem ist nur konnte ich nicht fixieren. es sollte irgendwie rekursiv dargestellt werden aber hab noch nicht geschafft.

Code:
public static ThreeNode createThree(int depth) {

     ThreeNode root = new ThreeNode();
       while(depth != 0) {
       for (int i = 1; i < depth ; i++) {
          ThreeNode knoten = new ThreeNode();
    root.setLeft(knoten);
    root.setMiddle(knoten);
    root.setRight(knoten);
    for (int j = 2; j < depth; j++) {
    if (knoten.left != null) {
       knoten.setLeft(knoten);
       knoten.setMiddle(knoten);
             knoten.setRight(knoten);
             if (knoten.middle != null) {
               knoten.setLeft(knoten);
         knoten.setMiddle(knoten);
               knoten.setRight(knoten);
               if (knoten.right != null) {
                 knoten.setLeft(knoten);
           knoten.setMiddle(knoten);
                 knoten.setRight(knoten);
               }
             }
           }
     
           }
         }
       
         return root;   
       }

         return null;
}
 

melmager

Erfahrenes Mitglied
#4
Klingt irgendwie nach Übungsaufgabe.
Aber egal: ich sehe nirgends eine Recursion denn das würde bedeuten das die classe eine childclasse erzeugt und dort weitermacht.
Du legst nur einmal eine Classe an und übergibst die gleiche Classe an mitte,links und rechts - macht kein sinn.
Daher brauchst du für jede Richtung eine neue Classe.

Code:
ThreeNode knoten = new ThreeNode();
this.setMiddle(knoten);
knoten = new ThreeNode();
this.setRight(knoten);
und da ein Knoten in der Elternclasse erzeugt wird und daher Ihr auch bekannt ist, wird auch kein Rückgabewert benötigt - sprich createThree(int depth) kann auch void sein.

in der Classe brauchste nur eine Abfrage die folgendes regelt:
beim deepwert von 1 setze mitte, links und rechts auf null;
ansonsten erzeuge neue classen und rufe dort createThree auf und übergebe deep - 1
am elegantesten wäre es wenn du
die logic hinter deep in den konstruktor machst

soweit erstmal von meiner Seite
 
Zuletzt bearbeitet: