Aufgabe Rekursion Binärer Baum

FuckinDonuts

Mitglied
Hallo liebes Java Forum,

ich habe ein kleines Problem mit einer Aufgabe und könnte ein wenig Hilfe gebrauchen :)

Und zwar soll ich eine Methode für die Klasse TreeNode schreiben mit der es mir möglich ist (Rekursiv natürlich), alle Knoten auf der übergegeben Ebene (level), sowie die darunteren zu löschen.

Mein Ansatz sieht bis jetzt wie folgt aus:
Java:
    public void removeLevel(int level) {
       int counter = 0;          //Auf welcher Ebene befinden wir uns zurzeit
       int boarder = level;    // Wann wird gelöscht

       if (level != 0) {         // Der Root Knoten soll erhalten bleiben
           for (int i = 0; i < 4; i++) {
               if (counter == level) { //Sobald man auf der gewünschten Ebenen ist sollen                                     // alle Referenzen auf null gesetzt werden. Kommt dem Löschen hier gleich
               
                children[I] = null;
              
                } else if (children[I] != null) { 
                   counter++;
                   children[I].removeLevel(counter);
               }
           }
       }
   }
Habe meinen Gedankengang mal mit Kommentiert... Falls jemand eine Idee hat, woran es liegen könnte dass es nicht funktioniert, darf mir gerne helfen. Würde mich riesig freuen. Kann auch gerne meine Testclient und die restliche Klasse hochladen falls einer es selbst in Java ausprobieren mag.[/I][/I][/I]
 

Anhänge

  • 5.JPG
    5.JPG
    297,9 KB · Aufrufe: 61
Zuletzt bearbeitet von einem Moderator:
X

Xyz1

Gast
Gut, dass du die Implementierung mit-angegeben hast mit Foto, da sonst die Aufgabenstellung nicht eindeutig wäre.

Ist die entsprechende Ebene gefunden, muss children = new TreeNode[4]; gesetzt werden. Das ist alles.
 

FuckinDonuts

Mitglied
Danke, für die schnelle Antwort. Ja das hatte ich auch schon, jedoch funktioniert das immernoch nicht ganz und ich weiß mir auch nicht mehr zu helfen. Habe mal den ganzen Code hochgeladen. Evtl. kann man dann besser nachvollziehen was ich meine.
Java:
public class TreeNode {
   private String name;
   private TreeNode children[];
   TreeNode(String name) {
       this.name = name;
       this.children = new TreeNode[4];
   }
   public void setName(String name) {
       this.name = name;
   }
   public String getName() {
       return name;
   }
   public void setChild(int index, TreeNode child) {
       this.children[index] = child;
   }
   // a)
   public int getHeight() {
       int counter = 0;

       for (int i = 0; i < children.length; i++) {
           if (children[i] != null) {
               int h = children[i].getHeight();
               if (h > counter) {
                   counter = h;
               }
           }
       }
       return counter + 1;
   }

   // b)
   public void removeLevel(int level) { 
       int counter = 0;
       int boarder = level;
       if (level != 0) {
           for (int i = 0; i < 4; i++) {
               if (counter == level) {
                   children = new TreeNode [4]; //Geändert
               } else if (children[i] != null) {
                   counter++;
                   children[i].removeLevel(counter);
               }
           }
       }
   }
Java:
public class TestClient {
   public static void main(String[] args) {
       TreeNode Root = new TreeNode("Hey");
       TreeNode First = new TreeNode("Run");
       TreeNode Second = new TreeNode("Faster!");
       Root.setChild(1, First);
       First.setChild(3, Second);
       Root.removeLevel(3);
       System.out.println(Root.getHeight());
   }
}
Normalerweise müsste die Ausgabe, beim Aufruf der Root.getHeight Methode, "2" sein da ja das 3 Level "gelöscht" wurde. Jedoch gibt er nach wie vor 3 aus. Ich glaube ich habe irgendwo noch einen kleinen Fehler in meinem Code. Vllt bei dem Inkrement counter++ ?
 
Zuletzt bearbeitet von einem Moderator:

Meniskusschaden

Top Contributor
Du solltest den Code in Code-Tags posten (z.B. über den Button "Einfügen"). Das kann man besser lesen und dabei wird auch nichts verfälscht, wie es hier offenbar geschehen ist. So ist es jedenfalls nicht kompilierbar.
 

FuckinDonuts

Mitglied
Vielen Dank für den Hinweis! Ja so sieht es auch gleich viel besser aus

Java:
public class TreeNode {

    private String name;
    private TreeNode children[];

    TreeNode(String name) {
        this.name = name;
        this.children = new TreeNode[4];
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setChild(int index, TreeNode child) {
        this.children[index] = child;
    }

    // a)
    public int getHeight() { // Methode die die Höhe eines Knoten bestimmt,
        // falls Wurzel null ist, -1 ausgeben
        int counter = 0; // Counter zu Beginn auf Null

        for (int i = 0; i < children.length; i++) {
            if (children[i] != null) {
                int h = children[i].getHeight();
                if (h > counter) {
                    counter = h;
                }
            }
        }
        return counter + 1;

    }

    // b)
    public void removeLevel(int level) { // Löscht alle Ebenen sowie die
                                            // darunter
        int counter = 0;
        int boarder = level;

        if (level != 0) {
            for (int i = 0; i < 4; i++) {
                if (counter == level) {
                    children = new TreeNode [4];
                } else if (children[i] != null) {
                    counter++;
                    children[i].removeLevel(counter);
                }
            }
        }
    }
}

Java:
public class TestClient {

    public static void main(String[] args) {
        TreeNode Root = new TreeNode("Hey");
        TreeNode First = new TreeNode("Run");
        TreeNode Second = new TreeNode("Faster!");
        Root.setChild(1, First);
        First.setChild(3, Second);
        Root.removeLevel(3);
        System.out.println(Root.getHeight());
    }
}
 
X

Xyz1

Gast
Du solltest den Code in Code-Tags posten
Ich glaub, es wird einfach nicht mein Nickname und meine Signatur gelesen! Dann kommen Fragen "Weißt du denn wie es geht" und Code wird einfach so frech unformatiert reingehauen. DerWissende heißt nicht DerWissende, wenn er nicht wüsste, wie es geht.

Desweiteren...... Sollte man lesen, wie man Fragen richtig stellt und Vor dem ersten Posting. Für Hausaufgaben und eine Musterlösung Prüfung bin ich nicht willens. ;)

Wahrscheinlich werd ich hier nichts mehr schreiben.
 

FuckinDonuts

Mitglied
Nach einer Musterlösung habe ich ja auch nicht gefragt, dachte es wäre etwas einfacher den Code nachzuvollziehen wenn man Ihn so vor sich hat.

Das der Code so "unformatiert reingehauen" wurde tut mir sehr leid, jedoch wusste ich nicht wie ich Ihn anders Einfügen sollte. War mein zweiter Post in dem Forum. Jetzt weiß ich ja wie es geht...

Trotzdem Vielen Dank für deine Mühen!
 

FuckinDonuts

Mitglied
Tatsächlich! Nein das war so auf jedenfall nicht gedacht.
Hab auch vergessen das sobald er in die Rekursion geht er jedes mal wieder auf 0 gesetzt wird. Habe mich jetzt auch ein bisschen mit dem debugger durch gekämpft und den code verändert und nun löscht er nur noch eine Ebene zu wenig... Das ist ja schon mal ein Anfang :D Werde mal morgen weiterschauen, ggf. den Code auch nochmal neu schreiben. Vielen Dank für deine Hilfe!

Java:
    public void removeLevel(int level) {
        int counter = 0;
        int boarder = level;
        for (int i = 0; i < children.length; i++) {
            if (counter == boarder) {
                children[i] = null;
            } else if (children[i] != null) {
                counter++;
                children[i].removeLevel(boarder - counter);
            }
        }
    }
 

mrBrown

Super-Moderator
Mitarbeiter
Wenn die Methode für irgendeinen Baum wie gewünscht Funktioniert hat, war das ziemlicher Zufall.
Ich weiß nicht was dabei deine Idee war, aber ich würde da noch mal ganz von vorne anfangen ;)
 

DrZoidberg

Top Contributor
Wieso kopierst du den Wert von level in die Variable boarder? Das ist völlig unnötig. Counter benötigst du auch nicht. Die Methode müsste eher so aussehen.
Java:
public void removeLevel(int level) {
  if(level < 1) {
    ...
  } else if(level == 1) {
    ...
  } else {
    for(...) {
    }
  }
}
 

Meniskusschaden

Top Contributor
Aber immerhin funktioniert der Aufruf von removeLevel() für die nächste Ebene jetzt korrekt. Allerdings zu umständlich, denn die Variablen boarder und counter sind dafür überflüssig. Die Erkenntnis würde ich für den Neuanfang noch mitnehmen.;)
 

mrBrown

Super-Moderator
Mitarbeiter
Aber immerhin funktioniert der Aufruf von removeLevel() für die nächste Ebene jetzt korrekt. Allerdings zu umständlich, denn die Variablen boarder und counter sind dafür überflüssig. Die Erkenntnis würde ich für den Neuanfang noch mitnehmen.;)
Das ist aber eine sehr weite Auslegung von "korrekt", mehr als 'es werden Zahlen übergeben' ist da kaum korrekt dran ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Rekursion Klausur Aufgabe Java Basics - Anfänger-Themen 2
C Lösung einer Aufgabe mittels Iteration und Rekursion Java Basics - Anfänger-Themen 12
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 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
T Methoden BinaryTree transformieren Aufgabe Java Basics - Anfänger-Themen 36
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
W Thread Aufgabe - Vorgehensweise Java Basics - Anfänger-Themen 8
J Problem bei Aufgabe "Geldstückelung" Java Basics - Anfänger-Themen 5
P Problem bei Java-Aufgabe Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben