Methoden BinaryTree transformieren Aufgabe

TobiCodi

Mitglied
Ich hänge seit Stunden über dieser Aufgabe und komme einfach nicht weiter... daher schick ich sie jetzt einfach mal rein, vielleicht kann mir jemand weiterhelfen :)

Aufgabe:
Implementieren Sie die Methode transformTree(), welche eine Wurzel des Types TreeNo- deBinary, und somit auch den Baum, übergeben bekommt, und einen neuen Baum des Types TreeNodeBinaryLevel konstruiert. Der neue Baum soll um die Information current- Level erweitert werden, welche beschreibt, auf welcher Höhe sich der betrachtete Knoten befindet, wobei eine Wurzel immer die Höhe 0 hat, und bei jeder weiteren Ebene das Attribut currentLevel um 1 inkrementiert wird. Zurückgegeben soll die Wurzel des neuen Baumes, wobei die Struktur des Baumes und die Arraylisten der Knoten identisch sein sollen, inklusive der neu berechneten Information currentLevel.

Zusatzinformationen:
Achten Sie darauf, dass alle Klassen, mit denen die Knoten initialisiert werden, gema ̈ß der Hierarchie in der Baumstruktur auch die Klassenhierarchie in Java umsetzen. Dies kann bedeuten, dass die Wurzel die Oberklasse aller anderen Klassen der Knoten nutzt, und die Bla ̈tter Unterklassen der Wurzel, als auch aller Klassen der Knoten nutzt, die auf dem Weg zu den Bla ̈ttern traversiert werden mu ̈ssen. Bedenken Sie jedoch, dass die Methoden Ihrer Implementierung u ̈ber kein Wissen der Klassenhierarchie verfu ̈gen. Dies fu ̈hrt dazu, dass Ihre Methoden schwa ̈chere Annahmen umsetzen mu ̈ssen, und implizieren somit, dass ggf. sich der generische Typ eines Ihrer Knoten und der dazu geho ̈rige Klassenparameter, der in der Klasse des Knotens gesetzt wird, unterscheiden.
Nehmen Sie auch zur Kenntnis, dass die Knoten der Klasse TreeNodeBinary u ̈ber ein Attribut keys des Types ArrayList verfu ̈gen, welches den Inhalt der Knoten darstellt. Diese Attribute sind abha ̈ngig von einem generischen Parameter.

Hier meine TreeNodeBinary Klasse:
Java:
import java.util.ArrayList;

public class TreeNodeBinary<T> {

    public Class<T> type;
    public ArrayList<T> keys;
    public TreeNodeBinary<? extends T> left;
    public TreeNodeBinary<? extends T> right;

    public TreeNodeBinary() {

    }

    public TreeNodeBinary(Class<T> type) {
        this.type = type;
    }

    /**
     * @return the generic type of the node
     */
    public Class<T> getType() {
        return type;
    }

}

Hier meine TreeNodeBinaryLevel Klasse:
Java:
import java.util.ArrayList;

public class TreeNodeBinaryLevel<T> {

    public Class<? extends T> type;
    public ArrayList<T> keys;
    public TreeNodeBinaryLevel<? extends T> left;
    public TreeNodeBinaryLevel<? extends T> right;
    public int currentLevel;

    public TreeNodeBinaryLevel(Class<? extends T> type) {
        this.type = type;
    }

    /**
     * @return the generic type of the node
     */
    public Class<? extends T> getType() {
        return type;
    }

}

Und hier nur das, wo mein Problem liegt: die transformTree() Methode, soweit wie ich es verstehe (ist halt nicht richtig):

Java:
public class GenericOperations {

    public static <T> TreeNodeBinaryLevel<T> transformTree(TreeNodeBinary<T> root) {
        int currentLevel;
        TreeNodeBinaryLevel newTree = new TreeNodeBinaryLevel(/*Class*/ null);

        if(/*node*/ == 0) {
            currentLevel = 0;
        }else {
            //calculate current Level
        }
        
        //expand newTree via information "currentLevel"
    
        return newTree.root; //return root of newTree
    }
}


Tausend Dank für jede Antwort!!!
 

mihe7

Top Contributor
Jeder Knoten eines Baums ist selbst wieder ein Baum -> Rekursion.

Ein TreeNodeBinaryLevel ist vom gleichen type und enthält die gleichen keys wie ein TreeNodeBinary, außerdem verfügt er über eine Höhe. Darüber hinaus hält er Zeiger auf die transformierten Kinder left und right, die sich eine Ebene tiefer befinden...
 

TobiCodi

Mitglied
@mihe7 vielen Dank für deine Antwort! Aber wie kann man sich das "Jeder Knoten eines Baums ist selbst wieder ein Baum" vorstellen? Jeder Knoten ist doch nur ein Knoten und erst mehrere Knoten bilden einen Baum, oder verstehe ich das falsch? :/

LG
 

mihe7

Top Contributor
Jetzt noch schnell die Kurve kriegen: ein Baum ist durch die Wurzel gegeben, daher die saloppe Formulierung "ist selbst wieder ein Baum" :)
 

TobiCodi

Mitglied
Wäre folgendes ein sinnvoller Pseudo-Code:
Java:
public static <T> TreeNodeBinaryLevel<T> transformTree(TreeNodeBinary<T> root) {
        
        transformNode(node, level){
            newNode = new TreeNodeBinaryLevel();
            newNode.level = level;
            if(node.left) {
                newNode.left=transformNode(left, level+1)
            }
            if(node.right) {
                newNode.right=transformNode(right, level+1)
            }
            return newNode;
        }
        
        return transformNode(root, 0);
    }
 

TobiCodi

Mitglied
Wäre folgendes ein sinnvoller Pseudo-Code:
Java:
public static <T> TreeNodeBinaryLevel<T> transformTree(TreeNodeBinary<T> root) {
      
        transformNode(node, level){
            newNode = new TreeNodeBinaryLevel();
            newNode.level = level;
            if(node.left) {
                newNode.left=transformNode(left, level+1)
            }
            if(node.right) {
                newNode.right=transformNode(right, level+1)
            }
            return newNode;
        }
      
        return transformNode(root, 0);
    }
Das bringt mich jetzt in die schwierigkeit, wie ich "node" und "level" bekomme... wobei ich doch ein public int currentLevel in den Klassen TreeNodeBinary bzw. TreeNodeBinaryLevel habe
 
Zuletzt bearbeitet:

TobiCodi

Mitglied
Stimmt :rolleyes::D.. mein Code sieht nun so aus:
Java:
public static <T> TreeNodeBinaryLevel<T> transformTree(TreeNodeBinary<T> root) {
 
         transformNode(root, TreeNodeBinaryLevel.currentLevel){
            newNode = new TreeNodeBinaryLevel();
            newNode.currentLevel = currentLevel;
            if(root.left) {
                newNode.left=transformNode(left, currentLevel+1)
            }
            if(root.right) {
                newNode.right=transformNode(right, currentLevel+1)
            }
            return newNode;
        }
        
        return transformNode(root, 0);
    }
 

TobiCodi

Mitglied
Stimmt :rolleyes::D.. mein Code sieht nun so aus:
Java:
public static <T> TreeNodeBinaryLevel<T> transformTree(TreeNodeBinary<T> root) {

         transformNode(root, TreeNodeBinaryLevel.currentLevel){
            newNode = new TreeNodeBinaryLevel();
            newNode.currentLevel = currentLevel;
            if(root.left) {
                newNode.left=transformNode(left, currentLevel+1)
            }
            if(root.right) {
                newNode.right=transformNode(right, currentLevel+1)
            }
            return newNode;
        }
       
        return transformNode(root, 0);
    }
Ich hab noch ein Problem mit dem currentLevel ... das ist doch wie schon geschrieben in den anderen Klassen initialisiert, soll ich das in meiner Methode irgendwie (durch TreeNodeBinaryLevel.currentLevel -> geht nicht, da nicht static) aufgreifen oder soll Ichs neu initialisieren? hmm..
 

mihe7

Top Contributor
Ein paar Korrekturen:
Java:
public static <T> TreeNodeBinaryLevel<T> transformTree(TreeNodeBinary<T> root) {
    return transformNode(root, 0);
}

public static <T> TreeNodeBinaryLevel<T> transformNode(TreeNodeBinary<T> node, int level) {
    TreeNodeBinaryLevel<T> newNode = new TreeNodeBinaryLevel<>(node.type);
    newNode.currentLevel = level;
    if(node.left) {
        newNode.left=transformNode(node.left, level+1)
    }
    if(root.right) {
        newNode.right=transformNode(node.right, level+1)
    }
    return newNode;
}

Hoffe mal, dass ich nichts übersehen habe.

EDIT: die keys fehlen natürlich noch...
 

TobiCodi

Mitglied
Ein paar Korrekturen:
Java:
public static <T> TreeNodeBinaryLevel<T> transformTree(TreeNodeBinary<T> root) {
    return transformNode(root, 0);
}

public static <T> TreeNodeBinaryLevel<T> transformNode(TreeNodeBinary<T> node, int level) {
    TreeNodeBinaryLevel<T> newNode = new TreeNodeBinaryLevel<>(node.type);
    newNode.currentLevel = level;
    if(node.left) {
        newNode.left=transformNode(node.left, level+1)
    }
    if(root.right) {
        newNode.right=transformNode(node.right, level+1)
    }
    return newNode;
}

Hoffe mal, dass ich nichts übersehen habe.
schonmal vieeeeelen Dank dass du mir noch hilfst!!! <3
 

TobiCodi

Mitglied
Nun noch die frage wie ich die keys mitschleppe.. ich hätte da an sowas gedacht:

Java:
public static <T> TreeNodeBinaryLevel<T> transformTree(TreeNodeBinary<T> root) {
        return transformNode(root, 0, root.keys);
    }

    public static <T> TreeNodeBinaryLevel<T> transformNode(TreeNodeBinary<T> node, int level, ArrayList<T> keys) {
        TreeNodeBinaryLevel<T> newNode = new TreeNodeBinaryLevel<>(node.type);
        newNode.currentLevel = level;
        if(node.left != null) {
            newNode.left=transformNode(node.left, level+1, node.keys);
        }
        if(node.right != null) {
            newNode.right=transformNode(node.right, level+1, node.keys);
        }
        return newNode;
    }
 

TobiCodi

Mitglied
Also wäre es damit gemacht
Java:
    public static <T> TreeNodeBinaryLevel<T> transformTree(TreeNodeBinary<T> root) {
        return transformNode(root, 0);
    }

    public static <T> TreeNodeBinaryLevel<T> transformNode(TreeNodeBinary<T> node, int level) {
        TreeNodeBinaryLevel<T> newNode = new TreeNodeBinaryLevel<>(node.type);
        newNode.currentLevel = level;
        if(node.left != null) {
            newNode.left=transformNode(node.left, level+1);
        }
        if(node.right != null) {
            newNode.right=transformNode(node.right, level+1);
        }
        newNode.keys = node.keys;
        return newNode;
    }
 

TobiCodi

Mitglied
jaa stimmt... :)
Java:
    public static <T> TreeNodeBinaryLevel<T> transformTree(TreeNodeBinary<T> root) {
        return transformNode(root, 0);
    }

    public static <T> TreeNodeBinaryLevel<T> transformNode(TreeNodeBinary<T> node, int level) {
        TreeNodeBinaryLevel<T> newNode = new TreeNodeBinaryLevel<>(node.type);
        newNode.currentLevel = level;
        newNode.keys = node.keys;
        if(node.left != null) {
            newNode.left=transformNode(node.left, level+1);
        }
        if(node.right != null) {
            newNode.right=transformNode(node.right, level+1);
        }
        return newNode;
    }
 

TobiCodi

Mitglied
ist es sehr umständlich den Spaß in eine Methode zu packen? :confused: wäre glaub ich schon besser, aber wenns aufwendig ist würde ich es erstmal so lassen und mich recht herzlich bei dir bedanken! :)
 

mihe7

Top Contributor
ist es sehr umständlich den Spaß in eine Methode zu packen?
Damit der Spaß iterativ läuft, kann man Knoten in einen Stack (bzw. der folgende Ansatz verwendet zwei) stecken.

Man kann die Erzeugung des TreeNodeBinaryLevel-Knotens in zwei Stufen durchführen. In der ersten Stufe konvertiert man einen TreeNodeBinary zu einem TreeNodeBinaryLevel ohne Berücksichtigung der Kindknoten. In der zweiten Stufe konvertiert und setzt man die Kindknoten.

Algorithmus:
Code:
convert(root : TreeNodeBinary) : TreeNodeBinaryLevel {
  todo := new Stack
  childless := new Stack
  newRoot := new TreeNodeBinaryLevel(root.keys, 0);
  push(todo, root)
  push(childless, newRoot)

  while (notEmpty(todo)) {
    node := pop(todo)
    parent := pop(childless)
    if (node.left != null) {
        parent.left := new TreeNodeBinaryLevel(node.left.keys, parent.level+1)
        push(todo, node.left)
        push(childless, parent.left)
    }
    if (node.right != null) {
        parent.right := new TreeNodeBinaryLevel(node.right.keys, parent.level+1)
        push(todo, node.right)
        push(childless, parent.right)
    }
  }
  return newRoot
}
 
X

Xyz1

Gast
Schnell einmal geschrieben
Java:
import java.util.ArrayList;
import java.util.List;

public class TreeNodeBinary<T> {
	public ArrayList<T> keys;
	public TreeNodeBinary<? extends T> left;
	public TreeNodeBinary<? extends T> right;

	public TreeNodeBinaryLevel<T> transform(int level) {
		TreeNodeBinaryLevel<T> tl = new TreeNodeBinaryLevel<T>();
		tl.keys = this.keys;
		tl.level = level;
		if (left == null && right == null)
			return tl;
		if (left != null)
			tl.left = this.left.transform(level + 1);
		if (right != null)
			tl.right = this.right.transform(level + 1);
		return tl;
	}

	public static void main(String[] args) {
		TreeNodeBinary<Integer> r = new TreeNodeBinary<Integer>();
		TreeNodeBinary<Integer> a = new TreeNodeBinary<Integer>();
		TreeNodeBinary<Integer> b = new TreeNodeBinary<Integer>();
		TreeNodeBinary<Integer> c = new TreeNodeBinary<Integer>();
		TreeNodeBinary<Integer> d = new TreeNodeBinary<Integer>();
		TreeNodeBinary<Integer> e = new TreeNodeBinary<Integer>();
		TreeNodeBinary<Integer> f = new TreeNodeBinary<Integer>();
		r.left = a;
		r.right = b;
		a.left = c;
		a.right = d;
		c.left = e;
		c.right = f;
		r.keys = new ArrayList<Integer>(List.of(10));
		a.keys = new ArrayList<Integer>(List.of(20));
		b.keys = new ArrayList<Integer>(List.of(30));
		c.keys = new ArrayList<Integer>(List.of(40));
		d.keys = new ArrayList<Integer>(List.of(50));
		e.keys = new ArrayList<Integer>(List.of(60));
		f.keys = new ArrayList<Integer>(List.of(70));
		System.out.println(r.transform(0).toString());
	}
}

class TreeNodeBinaryLevel<T> extends TreeNodeBinary<T> {
	public int level;

	@Override
	public String toString() {
		return String.format("[level=%s, keys=%s, left=%s, right=%s]", level, keys, left, right);
	}
}

[level=0, keys=[10], left=[level=1, keys=[20], left=[level=2, keys=[40], left=[level=3, keys=[60], left=null, right=null], right=[level=3, keys=[70], left=null, right=null]], right=[level=2, keys=[50], left=null, right=null]], right=[level=1, keys=[30], left=null, right=null]]

Das lässt sich relativ geschickt mit Rekursion lösen...
 

TobiCodi

Mitglied
Danke euch! In einer über übernächsten Aufgabe heisst es:

"Implementieren Sie die Methode insertElem(). Diese Methode erhält eine Wurzel des Types TreeNodeBinaryLevel und ein Arraylist, und soll die Elemente der Arraylist in alle Arraylisten keys aller Knoten einfügen, wo dies möglich ist."

Habt ihr eine Ahnung was die da von mir verlangen? :)
Heisst das, dass ich einfach die Elemente der gegebenen ArrayList in alle Keys reinschreibe? Wo soll dies denn nicht möglich sein? Im Gegensatz zu einem Array, welches über eine Länge beschränkt ist, ist es doch bei einer ArrayList relativ offen.

Ahhhh!! Es kann sein, dass es Typabhängig gemeint ist... also dass ich einzelne Nodes unterschiedlich initialisiere (Integer/ String/ Long/ ...) und wenn die gegebene ArrayList vom Typ String ist, diese Elemente nur in die Keys vom Typ String einfügen soll hmm.. würde Sinn machen, da ich in meiner TreeNodeBinaryLevel-Klasse ja eine getType() Methode hab :)

Java:
public static <T> void insertElem(TreeNodeBinaryLevel<T> root, ArrayList<?> array) {
        // TODO
    }

Obiges ist vorgegeben und darf für meine Methode nicht verändert werden.
Ich müsste also durch alle Nodes gehen, jeweils mit getType auf Typ-Gleichheit zum gegebenen Array prüfen und dann ggf die ArrayList-Elemente in die Keys packen. Müsste ich hinbekommen. Einzige Sache wäre:
Wie kann ich durch meine Nodes iterieren (wenn ich das obige fixe unberührt lasse)

Liebe Grüsse
 

TobiCodi

Mitglied
Rekursiv. Die Idee ist doch folgende: füge alle passende Elemente erstmal in root ein. Wenn dann noch was übrig ist, probier es im linken Teilbaum. Wenn dann noch was übrig ist, probier es im rechten.
Macht man das so in der Art oder?
Java:
public static <T> void insertElem(TreeNodeBinaryLevel<T> root, ArrayList<?> array) {

        if(root.getType() == array.getClass()) {
            root.keys.addAll((Collection<? extends T>) array);
        }
    }

Also: Wenn der Datentyp vom Node gleich dem Datentyp der Objekte einer ArrayList ist (das ist ggf noch nicht ganz richtig), dann sollen alle Elemente aus array in die keys eingefügt werden
 

mihe7

Top Contributor
Nicht ganz :) Du musst jedes einzelne Element aus array nach dem Typ fragen und wenn es zutrifft, zu root hinzufügen und aus array entfernen. Danach kannst Du prüfen, ob array schon leer ist, falls nicht dann fügst Du in den linken und den rechten Teilbaum ein.
 

TobiCodi

Mitglied
Das mit dem "aus array entfernen" hab ich noch nicht ganz verstanden.

Laut Aufgabenstellung soll ich doch diese ArrayList-Elemente in ALLE keys ALLER Nodes einfügen (solange der Typ passt). Oder verstehe ich das falsch?

Unten mein veränderter Code.
Java:
public static <T> void insertElem(TreeNodeBinaryLevel<T> root, ArrayList<?> array) {

        for (int i = 0; i < array.size(); i++) {

            if (root.getType() == array.get(i).getClass()) {
                root.keys.addAll((Collection<? extends T>) array);
            }
        }
    }

Hier der Einfachheit halber nochmal die Aufgabenstellung:
Implementieren Sie die Methode insertElem(). Diese Methode erhält eine Wurzel des Types TreeNodeBinaryLevel und ein Arraylist, und soll die Elemente der Arraylist in alle Arraylisten keys aller Knoten einfügen, wo dies möglich ist.
 

TobiCodi

Mitglied
okay gut :)
Ich überlege wie ich jetzt weitermache. Aktuell habe ich doch nur alle array-Elemente in meinen root.keys gepackt (wenns vom typ her passt).
Also muss ich das war ich mit meiner root gemacht hab, jetzt auch mit allen anderen Nodes machen. Sprich: Mit ner Rekursion durch alle Nodes gehen. Das stell ich mir so vor:

Java:
public static <T> void insertElem(TreeNodeBinaryLevel<T> root, ArrayList<?> array) {

        for (int i = 0; i < array.size(); i++) {
            if (root.getType() == array.get(i).getClass()) {
                root.keys.addAll((Collection<? extends T>) array);
            }
        }
        TreeNodeBinaryLevel<T> newNode = new TreeNodeBinaryLevel<>(root.type);
        if (root.left != null) {
            newNode.left = insertElem(newNode, array);
        }
        if (root.right != null) {
            newNode.right = insertElem(newNode, array);
        }
    }
 

mihe7

Top Contributor
Fast, Du brauchst keinen neuen Knoten zu erzeugen, denn die Knoten sind ja schon vorhanden. Beispielhaft für den linken Teilbaum:
Java:
if (root.left != null) {
    insertElem(root.left, array);
}
 

TobiCodi

Mitglied
natürlich hahah vielen Dank!!
damit wäre die Aufgabe dann getan oder?
Java:
public static <T> void insertElem(TreeNodeBinaryLevel<T> root, ArrayList<?> array) {

        for (int i = 0; i < array.size(); i++) {
            if (root.getType() == array.get(i).getClass()) {
                root.keys.addAll((Collection<? extends T>) array);
            }
        }
        if (root.left != null) {
            insertElem(root.left, array);
        }
        if (root.right != null) {
            insertElem(root.right, array);
        }
    }
 

TobiCodi

Mitglied
Hallo @mihe7 :)
Wenn ich die Aufgabe mit der transformTree() - Methode in nem JUnit-Test testen möchte, wie soll ich das anstellen?
Nochmals kurz was die Methode macht:

Implementieren Sie die Methode transformTree(), welche eine Wurzel des Types TreeNodeBinary, und somit auch den Baum, übergeben bekommt, und einen neuen Baum des Types TreeNodeBinaryLevel konstruiert. Der neue Baum soll um die Information currentLevel erweitert werden, welche beschreibt, auf welcher Höhe sich der betrachtete Knoten befindet, wobei eine Wurzel immer die Höhe 0 hat, und bei jeder weiteren Ebene das Attribut currentLevel um 1 inkrementiert wird. Zurückgegeben soll die Wurzel des neuen Baumes, wobei die Struktur des Baumes und die Arraylisten der Knoten identisch sein sollen, inklusive der neu berechneten Information currentLevel.

So. Meine Idee wäre folgende: Ich erstelle einen neuen TreeNodeBinary-Baum und einen TreeNodeBinaryLevel-Baum. Wende dann auf die Root des TreeNodeBinary-Baums die Methode transformTree() an und test dann, ob die beiden wurzeln der Bäume von der Klasse her gleich sind. Soweit die Theorie dazu, hier ist mein Ansatz:

Code:
@Test
    public void transformTreeTest() {
        TreeNodeBinary<A> root = new TreeNodeBinary<A>(A.class);
        TreeNodeBinary<B> left = new TreeNodeBinary<B>(B.class);
        TreeNodeBinary<C> right = new TreeNodeBinary<C>(C.class);
 
        TreeNodeBinaryLevel<A> root2 = new TreeNodeBinaryLevel<A>(A.class);
        TreeNodeBinaryLevel<B> left2= new TreeNodeBinaryLevel<B>(B.class);
        TreeNodeBinaryLevel<C> right2 = new TreeNodeBinaryLevel<C>(C.class);

        
        root.left = left; 
        root.right = right;
        GenericOperations.transformTree(root);
        
        assertEquals(root.getClass(), root2.getClass()); 
    }

Problem an der Sache:
Code:
java.lang.AssertionError: expected:<class h08.TreeNodeBinary> but was:<class h08.TreeNodeBinaryLevel>

Also hat sich die root nach der transformation nicht von der Klasse her geändert... wie soll Ichs sonst testen?

Habs auch schon mit .getType() versucht. Dann ist der test bestanden, aber leider auch bestanden wenn ich transformTree() auf die 2. Wurzel gar nicht ausgeübt hab...

LG, vielleicht hast du ne bessere Idee
 

mihe7

Top Contributor
Also hat sich die root nach der transformation nicht von der Klasse her geändert...
Natürlich nicht. Der Typ eines Objekts ist fix. Die Methode transformTree liefert (gibt zurück) eine neue Wurzel und die musst Du vergleichen.

Dazu musst Du erstmal definieren, was die Gleichheit zweier Knoten bedeutet. Normalerweise würde man dazu in den TreeNode-Klassen equals und hashCode überschreiben. Ich weiß aber nicht, ob Du das darfst, daher implementieren wir mal in der Testklasse ein entsprechende assert-Methode.

Zwei Knoten n1, n2 vom Typ TreeNodeBinaryLevel sind gleich, gdw. n1 == null und n2 == null gilt oder aber alle folgenden Punkte erfüllt sind:
  1. n1.type und n2.type sind gleich
  2. n1.keys und n2.keys sind gleich
  3. n1.left und n2.left sind gleich
  4. n1.right und n2.right sind gleich
  5. n1.currentLevel und n2.currentLevel sind gleich
Dabei bedeutet - mit Ausnahme von 3 und 4 - "sind gleich" genau das, was von assertEquals von JUnit überprüft wird. Bei 3 und 4 muss dagegen unsere Definition verwendet werden.

Java:
public <T> static void assertNodeEquals(TreeNodeBinaryLevel<T> expected, TreeNodeBinaryLevel<T> actual) {
    if (expected == null || actual == null) { // wenn einer von beiden "Knoten" null ist
        assertTrue(expected == actual); // dann muessen beide null sein
    } else {
        assertEquals(expected.type, actual.type);
        assertEquals(expected.keys, actual.keys);
        assertEquals(expected.currentLevel, actual.currentLevel);
        assertNodeEquals(expected.left, actual.left);
        assertNodeEquals(expected.right, actual.right);
    }
}

Damit kannst Du jetzt Deinen Test durchführen:
Java:
    @Test
    public void transformTreeTest() {
        TreeNodeBinary<A> root = new TreeNodeBinary<A>(A.class);
        TreeNodeBinary<B> left = new TreeNodeBinary<B>(B.class);
        TreeNodeBinary<C> right = new TreeNodeBinary<C>(C.class);
 
        TreeNodeBinaryLevel<A> root2 = new TreeNodeBinaryLevel<A>(A.class);
        TreeNodeBinaryLevel<B> left2= new TreeNodeBinaryLevel<B>(B.class);
        TreeNodeBinaryLevel<C> right2 = new TreeNodeBinaryLevel<C>(C.class);

        
        root.left = left; 
        root.right = right;
        TreeNodeBinaryLevel<A> transformed = GenericOperations.transformTree(root);
        
        assertNodeEquals(root2, transformed);
    }

Der Test sollte übrigens fehlschlagen - wenn nicht, dann stimmt was nicht :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A BinaryTree komplett kopieren Java Basics - Anfänger-Themen 7
Farbenfroh Suche Übungsaufgaben: BinaryTree, Stack Java Basics - Anfänger-Themen 0
R List to BinaryTree Java Basics - Anfänger-Themen 13
M transposen Vektor transformieren Java Basics - Anfänger-Themen 8
A Koordinaten transformieren (Rotation) Java Basics - Anfänger-Themen 4
Jere58 Aufgabe zu Mustern Java Basics - Anfänger-Themen 1
M Interfaces Aufgabe Java Basics - Anfänger-Themen 2
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
Justin4687 Benötige Hilfe bei folgender Aufgabe Java Basics - Anfänger-Themen 2
A Erste Schritte Aufgabe mit while Schleife Java Basics - Anfänger-Themen 11
S Hilfe zu einer Aufgabe Java Basics - Anfänger-Themen 5
M Java Programmierung Aufgabe Anfänger Java Basics - Anfänger-Themen 1
R Hilfe bei Aufgabe Java Basics - Anfänger-Themen 4
Mikejr Java Berg aufgabe Java Basics - Anfänger-Themen 6
frager2345 Aufgabe Hash Objekt Elemente ausgeben Java Basics - Anfänger-Themen 2
berserkerdq2 Habe ich die Aufgabe richtig gelöst? Java Basics - Anfänger-Themen 3
D Hilfe bei einer Aufgabe mit for-Schleife Java Basics - Anfänger-Themen 6
Neuling47 Ich zerbreche mit den kopf an einer Aufgabe Java Basics - Anfänger-Themen 61
G Fragen zu Kompelierfehler in Aufgabe. Java Basics - Anfänger-Themen 25
Robert_Klaus Hamster java Simulation Hilfe bei einer Aufgabe Java Basics - Anfänger-Themen 5
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Verständins Problem bei Aufgabe Java Basics - Anfänger-Themen 4
T Informatik Studium Aufgabe Java Basics - Anfänger-Themen 4
T Aufgabe Informatik Studium Java Basics - Anfänger-Themen 10
I matrix aufgabe Java Basics - Anfänger-Themen 22
J Brauche Hilfe bei for-each Aufgabe Java Basics - Anfänger-Themen 1
9 Aufgabe Bruttorechner Java Basics - Anfänger-Themen 14
N Fehler im Code (Aufgabe für Anfänger) Java Basics - Anfänger-Themen 11
J Brauche Hilfe bei Aufgabe Java Basics - Anfänger-Themen 4
J boolean aufgabe Java Basics - Anfänger-Themen 9
D Snake-Spiel ähnliche Aufgabe Hilfe Java Basics - Anfänger-Themen 3
M Hilfe - Array Aufgabe Java Basics - Anfänger-Themen 8
StevenGG Aufgabe im Studium Java Basics - Anfänger-Themen 36
G Strings auf Gleichheit prüfen - Aufgabe vom Prof. Java Basics - Anfänger-Themen 5
S Schulaufgabe - verstehe leider die Aufgabe nicht Java Basics - Anfänger-Themen 4
Leo0909 Ich brauche Hilfe bei dieser Aufgabe Java Basics - Anfänger-Themen 2
R Eclipse Aufgabe Java Basics - Anfänger-Themen 4
J OOP-Aufgabe Java Basics - Anfänger-Themen 15
Helix19 Informatik Grundkurs (Haus-)Aufgabe Java Basics - Anfänger-Themen 5
P eine kleine Aufgabe mit Audio Java Basics - Anfänger-Themen 1
TimoN11 Verständnisfrage bei Aufgabe Java Basics - Anfänger-Themen 2
TimoN11 Java spezielle Suchprobleme - Aufgabe Java Basics - Anfänger-Themen 5
M Könnte mir jemand diese Aufgabe erklären? Java Basics - Anfänger-Themen 2
M Könnte mir jemand diese Aufgabe erklären? Java Basics - Anfänger-Themen 9
dieter000 Aufgabe Hilfe Java Basics - Anfänger-Themen 18
jonathanpizza Hilfe bei einer Aufgabe Java Basics - Anfänger-Themen 5
Q Hilfe auf Aufgabe(Matrixmultiplikation) Java Basics - Anfänger-Themen 1
jonathanpizza Hilfe bei der Aufgabe Java Basics - Anfänger-Themen 19
justemii Gehalt berechnen - Aufgabe Java-Programm Java Basics - Anfänger-Themen 9
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
C Rechnungen-Aufgabe Java Basics - Anfänger-Themen 18
C Biene-Aufgabe Java Basics - Anfänger-Themen 2
K Algorithmen und Datenstrukturen Programmier Aufgabe Java Basics - Anfänger-Themen 10
M Verständnisfrage zu eine Online Aufgabe Java Basics - Anfänger-Themen 7
T Aufgabe Flussdiagramm, kann jemand checken? Java Basics - Anfänger-Themen 8
B Methoden Ausgeben Aufgabe Java Basics - Anfänger-Themen 15
M Lösung Aufgabe - Java Programmiren lernen für Dummies Java Basics - Anfänger-Themen 11
J Rekursion Klausur Aufgabe Java Basics - Anfänger-Themen 2
J Exception-Aufgabe Java Basics - Anfänger-Themen 8
I Methoden char Array Aufgabe (bitte hierbei um Hilfe) Java Basics - Anfänger-Themen 3
F Aufgabe: Abstand von einem Punkt zu einem anderen Punkt Java Basics - Anfänger-Themen 10
T Aufgabe zum Verschlüsselungsalgorithmus Java Basics - Anfänger-Themen 11
J Erste Schritte Aufgabe Java Basics - Anfänger-Themen 24
J Brauche Hilfe bei einer aufgabe Java Basics - Anfänger-Themen 1
J Hat jemand einen Lösungsansatz für diese Aufgabe? Java Basics - Anfänger-Themen 1
S Sortieralgorithmus - Aufgabe mit Lösungsidee Java Basics - Anfänger-Themen 20
A Aufgabe: Gleitkommazahlen Java Basics - Anfänger-Themen 3
A Java-Programmierungs Aufgabe Java Basics - Anfänger-Themen 2
U Aufgabe zu Kontrollstrukturen Java Basics - Anfänger-Themen 8
G Probleme bei Aufgabe Java Basics - Anfänger-Themen 12
J Aufgabe als Feuertaufe Java Basics - Anfänger-Themen 8
S Unbedingte hilfe bei Java Aufgabe [Schleife / Zinsrechnung] Java Basics - Anfänger-Themen 14
J Hilfe bei Java Aufgabe (Restschuld berechnen) Java Basics - Anfänger-Themen 11
G Ratlosigkeit zur Aufgabe im Anhang (boolean, equals.) Java Basics - Anfänger-Themen 20
S Hilfe bei Java Aufgabe (Schleifen) Java Basics - Anfänger-Themen 25
B Probleme bei einer Aufgabe Java Basics - Anfänger-Themen 19
B BITTE!! Ich brauche dringende Hilfe bei einer Aufgabe Java Basics - Anfänger-Themen 17
H aufgabe 4 Java Basics - Anfänger-Themen 297
M Hilfe bei Projektorientierungs-Aufgabe !! Java Basics - Anfänger-Themen 3
J Java Starthilfe Verständnisfrage Aufgabe Java Basics - Anfänger-Themen 2
H java aufgabe Java Basics - Anfänger-Themen 7
E Mathematische Aufgabe: Antwort entspricht nicht der Lösung Java Basics - Anfänger-Themen 5
H was verlangt die aufgabe ? Java Basics - Anfänger-Themen 10
H java aufgabe Java Basics - Anfänger-Themen 68
H java aufgabe Java Basics - Anfänger-Themen 25
H aufgabe java luhn algorithmus Java Basics - Anfänger-Themen 10
R Java Aufgabe (Teilbarkeit) Java Basics - Anfänger-Themen 7
H java aufgabe Java Basics - Anfänger-Themen 44
H java aufgabe Java Basics - Anfänger-Themen 7
H java string aufgabe Java Basics - Anfänger-Themen 10
H array aufgabe Java Basics - Anfänger-Themen 13
D Erste Schritte Lösen dieser Aufgabe, Hilfe! Java Basics - Anfänger-Themen 12
H aufgabe Java Basics - Anfänger-Themen 9
H lösung aufgabe Java Basics - Anfänger-Themen 12
S Hilfe für Aufgabe Java Basics - Anfänger-Themen 4
H java online aufgabe Java Basics - Anfänger-Themen 4
H Array aufgabe Java Basics - Anfänger-Themen 7
H oop aufgabe probe kalusur Java Basics - Anfänger-Themen 11
H oop aufgabe Java Basics - Anfänger-Themen 19
H JAVA AUFGABE Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben