@@ -0,0 +1,2376 @@
+package main.java.exercise;%0A%0Aimport main.java.exercise.tree.AVLNode;%0Aimport main.java.exercise.tree.Node;%0Aimport main.java.framework.StudentInformation;%0Aimport main.java.framework.StudentSolution;%0A%0Apublic class StudentSolutionImplementation implements StudentSolution %7B%0A    @Override%0A    public StudentInformation provideStudentInformation() %7B%0A        return new StudentInformation(%0A                %22Joaquin%22, // Vorname%0A                %22Telleria%22, // Nachname%0A                %2201408189%22 // Matrikelnummer%0A        );%0A    %7D%0A%0A    // Implementieren Sie hier Ihre L%C3%B6sung f%C3%BCr das Einf%C3%BCgen in einen einfachen bin%C3%A4ren Suchbaum%0A    public void insertSimpleBinarySearchTree(Node root, Node newNode) %7B%0A        //System.out.println(%22insert(%22+root.getKey()+%22, %22+newNode.getKey()+%22)%22);%0A        Node predecessorNode = null; // predecessorNode keeps track of the previous node of the scanner node.%0A        Node scannerNode = root; // scanner node is our iteration reference node%0A%0A        // Part 1 of the algorithm: Find the predecessor node of the new node to insert.%0A        // the first part of the while loop checks whether the iteration reference scanner node hasnt hit a dead end%0A        // the second part of the while loop checks whether the node already exits in the tree%0A        while(scannerNode != null && scannerNode.getKey() != newNode.getKey())%7B%0A            predecessorNode = scannerNode;%0A            if (newNode.getKey() %3C scannerNode.getKey())%7B%0A                scannerNode = scannerNode.getLeftChild();%0A            %7D%0A            else%7B%0A                scannerNode = scannerNode.getRightChild();%0A            %7D%0A        %7D%0A%0A        // Part 2 of the algorithm: Insert the new node to the left or to the right of its predecessor node.%0A        if (predecessorNode == null)%7B // if predecessor is null, something has gone wrong.%0A            return; // then don't add to the tree%0A        %7D%0A        if (newNode.getKey() %3C predecessorNode.getKey())%7B // check if the new node should go left or right of the predecessor%0A            predecessorNode.attachNodeLeft(newNode); // attach the smaller value to the left%0A        %7Delse %7B%0A            predecessorNode.attachNodeRight(newNode); // attach the larger value to the right%0A        %7D%0A%0A    %7D%0A%0A    // Implementieren Sie hier Ihre L%C3%B6sung f%C3%BCr das Einf%C3%BCgen in einen AVL-Baum%0A    public void insertAVLTree(AVLNode p, AVLNode newNode) %7B%0A%0A    %7D%0A%0A%7D%0A

Create StudentSolutionImplementation.java