public boolean remove(K k) {
        Node<K> parent = head;
        Node<K> n = head.getRight();

        /*
         *  Sucht Knoten mit zu löschendem Schlüssel.
         *  Schleife erfasst auch Elternknoten des Knotens.
         */
        while (n != nullNode) {
            int compare = k.compareTo(n.getKey());

            

            if (compare == 0) {
                break;
            }

            parent = n;
            n = (compare > 0 ? n.getRight() : n.getLeft());

        }
        
        /*
         * Falls Knoten mit gesuchtem Schlüssel nicht exisitet
         * gebe false zurück.
         */
        if (n == nullNode) {
            return false;
        }
        
        System.out.println("Anzahl Kinder " + getChildCount(n) );
        
        /*
         * Abhängig von der Kindanzahl wird die entsprechende Aktion
         * bzw. Methode ausgeführt.
         */
        switch (getChildCount(n)) {
            case 0:
                if(parent.getLeft() == n)
                    parent.setLeft(nullNode);
                else
                    parent.setRight(nullNode);
                break;
            case 1:                
                this.replace_with_child(parent, n);
                break;
            case 2:
                this.replace_with_Inorderpredecessor(parent, n);
                break;
            default:
                break;
        }

        return true;
    }