Binärbaum Blätter finden und Ausgeben

httpdigest

Top Contributor
Das war nicht als Frage gemeint. Also: "Du kannst es rekursiv oder iterativ mit Stack lösen."
Jetzt darfst du erstmal bitte selber Lösungsvorschläge machen, oder erklären, wo es hakt, bzw. wieso du selber nicht auf eine Lösung kommst.
 

dan1996

Aktives Mitglied
ich "laufe" mit der Methode jeden Knoten ab, aber mein Problem ist dass ich nicht hinkriege, oder nicht weiß, wie ich alle Blätter zurückbekomme

Code:
public void tiefe(Tree r) {

        if (r.root != null) {

            tiefe(r.root.l);

            System.out.println(r.root.v);
            tiefe(r.root.r);

            // System.out.println("Blatt:\t" + r.root.v);

        }
    }
 

dan1996

Aktives Mitglied
Code:
class TNode {

    public int v;

    public Tree l, r;

    public int t = 0;

    public TNode(int v) {
        this.v = v;
        this.l = new Tree();
        this.r = new Tree();
    }

}

class Tree {
    public TNode root = null;

    public boolean isEmpty() {
        return root == null;
    }

    public void insert(int element) {
        if (isEmpty()) {
            root = new TNode(element);
            root.t = 1 + root.t;
        } else if (element < root.v) {
            root.l.insert(element);
            root.l.root.t = 1 + root.t;
        } else {
            root.r.insert(element);
            root.r.root.t = 1 + root.t;
        }
    }


    public int countNodes(Tree r) {
        if (r.root == null) {
            return 0;
        } else {
            int count = 1;
            count += countNodes(r.root.l);
            count += countNodes(r.root.r);
            return count;
        }
    }

    public void tiefe(Tree r) {

        if (r.root != null) {

            tiefe(r.root.l);

            System.out.println(r.root.v);
            
            tiefe(r.root.r);

            // System.out.println("Blatt:\t" + r.root.v);

        }
    }
 

httpdigest

Top Contributor
Also diese Klassen solltest du nochmal von Grund auf neu designen. Warum hat denn ein Knoten im Baum zwei Referenzen auf den Baum und nicht auf die Kindknoten? So kannst du eigentlich überhaupt nicht durch die Knoten des Baumes iterieren.
Du solltest vielleicht erstmal die genaue Bedeutung von "was ist bei dir ein Baum/Tree" und "was ist bei dir ein Knoten/TNode" klären.
 

dan1996

Aktives Mitglied
Die Klasse wurde nicht von mir geschrieben, die Klasse war für die Aufgabe gegeben und die soll halt um die Methode erweitert werden, die die Blätter ausgibt
 

httpdigest

Top Contributor
Die Klasse wurde nicht von mir geschrieben, die Klasse war für die Aufgabe gegeben
Das will ich mal hart bezweifeln. Niemand würde so einen Quatsch in eine Aufgabenstellung schreiben. Nein wirklich, das ist ganz großer Mist. Zumal die Instanzmethoden der Klasse Tree auch überhaupt kaum mit der eigentlichen `this` Instanz arbeiten sondern immer unnötigerweise den Tree als Parameter bekommen.
 

httpdigest

Top Contributor
Aber sei's drum. Einen Blattknoten würdest du hier daran erkennen, dass `l.root == null` ist bzw. `r.root == null`.
Aber ehrlich, die Benennung der Felder und auch der Methoden ist einfach unfassbar schlecht.
 

dan1996

Aktives Mitglied
Das will ich mal hart bezweifeln. Niemand würde so einen Quatsch in eine Aufgabenstellung schreiben. Nein wirklich, das ist ganz großer Mist.
Naja so ist es halt in der Aufgabe, arbeite grade paar Altklausuren durch und es gibt noch paar ähnliche Aufgabe die genau so mit der Tree und Node Klasse aufgebaut sind

Aber ehrlich, die Benennung der Felder und auch der Methoden ist einfach unfassbar schlecht.
Die Benennung hatte ich eben noch geändert, damit es nicht komplett identisch ist :D
 
K

kneitzel

Gast
Das will ich mal hart bezweifeln. Niemand würde so einen Quatsch in eine Aufgabenstellung schreiben. Nein wirklich, das ist ganz großer Mist. Zumal die Instanzmethoden der Klasse Tree auch überhaupt kaum mit der eigentlichen `this` Instanz arbeiten sondern immer unnötigerweise den Tree als Parameter bekommen.
Aber die Methoden stammen ja von ihm so wie ich das verstanden habe. Das da also mit dem Parameter statt mit this gearbeitet wird, könnte er dann ja anpassen.

Aber den Aufbau des Baumes sehe ich so auch zum ersten Mal. Ich kenne es eigentlich auch so, dass es nur einen Tree gibt, der dann Nodes hat. Ob sich da jemand gedacht hat, dass er da dann rechts und links wieder jeweils einen Baum haben will? Und daher jeweils wieder einen Tree genommen hat? Aber den wirklichen Sinn dahinter sehe ich nicht, denn das macht es ja nur unnötig komplexer und damit schwerer zu verstehen....
 

dan1996

Aktives Mitglied
Aber die Methoden stammen ja von ihm so wie ich das verstanden habe. Das da also mit dem Parameter statt mit this gearbeitet wird, könnte er dann ja anpassen.

Aber den Aufbau des Baumes sehe ich so auch zum ersten Mal. Ich kenne es eigentlich auch so, dass es nur einen Tree gibt, der dann Nodes hat. Ob sich da jemand gedacht hat, dass er da dann rechts und links wieder jeweils einen Baum haben will? Und daher jeweils wieder einen Tree genommen hat? Aber den wirklichen Sinn dahinter sehe ich nicht, denn das macht es ja nur unnötig komplexer und damit schwerer zu verstehen....

Die einzigen Methoden die von mir stammen sind diese beiden, der Rest ist vorgegeben
Code:
public int countNodes(Tree r) {
        if (r.root == null) {
            return 0;
        } else {
            int count = 1;
            count += countNodes(r.root.l);
            count += countNodes(r.root.r);
            return count;
        }
    }

    public void tiefe(Tree r) {

        if (r.root != null) {

            tiefe(r.root.l);

            System.out.println(r.root.v);
            
            tiefe(r.root.r);

            // System.out.println("Blatt:\t" + r.root.v);

        }
 
K

kneitzel

Gast
Ja genau. Und genau diese beiden Methoden wurden bemängelt.

Du könntest diese so umschreiben, dass kein Parameter übergeben wird. Also kein Parameter Tree r. Statt dem r verwendest Du dann this bzw. lässt es direkt weg. Der Aufruf von z.B. tiefe(r.root.r); wird dann zu root.r.tiefe();
 

dan1996

Aktives Mitglied
Okay danke werde ich umschreiben aber ich kriege es immer noch nicht hin eine rekursive Methode zu schreiben die mir die Blätter ausgibt
 

httpdigest

Top Contributor
Die Frage hier ist: Was kennzeichnet denn überhaupt einen Blattknoten hier?
Denn es kann ja auch sowohl nur der linke als auch nur der rechte Teilbaum gefüllt sein. Z.B. beim Einfügen von 1, 2, 3, 4 (in dieser Reihenfolge) so dass sich ein rechtslastiger Baum ergibt. Ist jetzt nur 4 der Blattknoten?
 

httpdigest

Top Contributor
Na dann prüfe doch in "tiefe" für den aktuellen Tree, ob sein root.l.root == null ist und sein root.r.root == null ist. Dann ist der Knoten vom aktuellen Tree ein Blattknoten.
 
K

kneitzel

Gast
Also rekursive Methoden sind unter dem Strich immer gleich aufgebaut:
a) Man hat ein Abbruchkriterium
b) man hat rekursive Aufrufe

Wenn Du jetzt einen Baum durchgehst: Wann musst (kannst) du rekursiv etwas aufrufen? Wann geht es nicht mehr weiter?
 

dan1996

Aktives Mitglied
Danke hat endlich geklappt :)
Code:
public void tiefe() {
            
        if(this.root != null ) {
            
            root.l.tiefe();
            root.r.tiefe();
            if(root.l.root == null && root.r.root == null ) {
                System.out.println(root.v);
            }
            
        }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Y Wie greift man auf die Knoten in einem Binärbaum zu? Java Basics - Anfänger-Themen 5
T Binärbaum-Suche Implementation Java Basics - Anfänger-Themen 6
A Binärbaum rekursiv durchsuchen und Referenz zurückgeben Java Basics - Anfänger-Themen 4
D Werte aus einem BinärBaum in einem Array speichern Java Basics - Anfänger-Themen 1
O BinärBaum einfügen Java Basics - Anfänger-Themen 13
E Erste Schritte Testklasse Binärbaum Java Basics - Anfänger-Themen 10
void19 Methoden Binärbaum Inorder Traversierung in Array speichern Java Basics - Anfänger-Themen 1
A Größten Eintrag aus Binärbaum löschen Java Basics - Anfänger-Themen 4
L Ganzen BinärBaum ausgeben? Java Basics - Anfänger-Themen 3
L Binärbaum (Stammbaum) Java Basics - Anfänger-Themen 8
S Binärbaum in PreOrder in ArrayList speichern Java Basics - Anfänger-Themen 0
J Methoden Binärbaum, Traversierung in Array speichern Java Basics - Anfänger-Themen 18
K BinärBaum Java Basics - Anfänger-Themen 4
J Max. Anzahl von Knoten im Binärbaum Java Basics - Anfänger-Themen 3
M Werte der Knoten in Binärbaum addieren (iterativ) Java Basics - Anfänger-Themen 6
C Binärbaum mit grafischer Ausgabe Java Basics - Anfänger-Themen 0
J Binärbaum formatiert ausgeben. Java Basics - Anfänger-Themen 7
P Listen sortieren mit Binärbaum gibt keine Ausgabe ab 10000 Integern Java Basics - Anfänger-Themen 14
E Binärbaum - von rekursiv zu iterativ Java Basics - Anfänger-Themen 10
W Größtes Element im unsortierten Binärbaum Java Basics - Anfänger-Themen 7
N Generischer Binärbaum - löschen Java Basics - Anfänger-Themen 1
M Binärbaum mit parent-Zeigern Java Basics - Anfänger-Themen 1
B Methoden BinärBaum als String Knoten löschen Java Basics - Anfänger-Themen 5
S Binärbaum kopieren Java Basics - Anfänger-Themen 6
B Binärbaum mit java implementieren! Java Basics - Anfänger-Themen 5
D Binärbaum Suche Java Basics - Anfänger-Themen 5
D Binärbaum probleme Java Basics - Anfänger-Themen 4
P Binärbaum - Primärschlüssel Java Basics - Anfänger-Themen 3
X Fehler Binärbaum Java Basics - Anfänger-Themen 6
PaulG Fragen zu Binärbaum Java Basics - Anfänger-Themen 21
N Binärbaum/Implementierung Java Basics - Anfänger-Themen 9
P Binärbaum Ordnungsproblem Java Basics - Anfänger-Themen 8
P Generischer Binärbaum (compareTo Frage) Java Basics - Anfänger-Themen 4
P einen binärbaum implementieren Java Basics - Anfänger-Themen 4
M Binärbaum - Problem bei Knoten anhängen / löschen Java Basics - Anfänger-Themen 5
B Binärbaum höhe herausfinden Java Basics - Anfänger-Themen 12
L Rot Scharz Baum von Binärbaum erben Java Basics - Anfänger-Themen 9
S Klassen Aufgabe: Binärbaum überprüfen Java Basics - Anfänger-Themen 16
S Binärbaum Java Basics - Anfänger-Themen 9
S Variable Parameterliste in Binärbaum Java Basics - Anfänger-Themen 2
N BinärBaum Hilfestellung Java Basics - Anfänger-Themen 8
S Binärbaum prüfen, ob sortiert oder unsortiert Java Basics - Anfänger-Themen 6
W Binärbaum zahlen addieren Java Basics - Anfänger-Themen 7
S Binärbaum - Klasse Knoten - Methode Suchen Java Basics - Anfänger-Themen 5
S Binärbaum Java Basics - Anfänger-Themen 7
I Binärbaum Java Basics - Anfänger-Themen 5
S Bitte um Hilfe beim unsortierten Binärbaum!! Java Basics - Anfänger-Themen 6
J Binärbaum getSize Java Basics - Anfänger-Themen 4
P Fragen zum Binärbaum Java Basics - Anfänger-Themen 3
S Binärbaum implementieren Java Basics - Anfänger-Themen 6
K Tiefe im Binärbaum Java Basics - Anfänger-Themen 2
G generischer binärbaum Java Basics - Anfänger-Themen 9
G Binärbaum und Wrapperklassen Java Basics - Anfänger-Themen 6
F Binärbaum codieren. Codeproblem! Java Basics - Anfänger-Themen 4
D rekursion im binärbaum Java Basics - Anfänger-Themen 11
0 Binärbaum als verkettete Liste Java Basics - Anfänger-Themen 3
T Binärbaum - noch ein "klitzekleiner Fehler" Java Basics - Anfänger-Themen 4
B Binärbaum auf Vollständigkeit prüfen Java Basics - Anfänger-Themen 15
G Frage zur einfügen in einem Binärbaum Java Basics - Anfänger-Themen 21
G Binärbaum grafisch darstellen Java Basics - Anfänger-Themen 4
M Blätter eines Baumes zählen Java Basics - Anfänger-Themen 2
G Aktionen auslösen, nach Klick auf "Blätter" eines Java Basics - Anfänger-Themen 2
J Ähnlichen String in Liste finden Java Basics - Anfänger-Themen 6
B Alle Zahlen finden, die 3 bestimmte Ziffern enthalten? Java Basics - Anfänger-Themen 9
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
Say Fehlenden Code finden in einer while-Schleife? Java Basics - Anfänger-Themen 11
J for Schleife kleinste Zufallszahl finden Java Basics - Anfänger-Themen 25
Substring in einem String finden Java Basics - Anfänger-Themen 13
B Den Dateipfad einer Java Datei durch Code in Selbiger finden? Java Basics - Anfänger-Themen 10
G Position einer unbekannten 3-stelligen-Zahl in einem String finden Java Basics - Anfänger-Themen 15
districon Java Nachhilfe - wo finden? Java Basics - Anfänger-Themen 9
sserio Rekursion größten Primfaktor finden funktioniert nicht Java Basics - Anfänger-Themen 8
P9cman Char Index rekursiv finden Java Basics - Anfänger-Themen 4
M Datums-Palindrome finden Java Basics - Anfänger-Themen 9
H Primzahlen finden - Zeit optimieren Java Basics - Anfänger-Themen 34
B in einem Array den nächstgelegenen Wert zu einem eingabewert finden Java Basics - Anfänger-Themen 8
B String - Wörter finden, welches Punkt und entsprechender Pre / Suffix hat? Java Basics - Anfänger-Themen 30
S Schwachstelle finden Java Basics - Anfänger-Themen 11
D kleinste Wurzel finden Java Basics - Anfänger-Themen 9
CptK Richtigen Pfad beim einlesen von Datei finden Java Basics - Anfänger-Themen 2
Devin Wo kann man einen Java Lehrplan finden? Java Basics - Anfänger-Themen 5
Y Wie kann ich ein Element in einer toString finden. Java Basics - Anfänger-Themen 2
V Beliebige Dreistellige Zahl Teiler finden Java Basics - Anfänger-Themen 4
J Lösungen zu einem Lückentext finden Java Basics - Anfänger-Themen 0
S Input/Output Reader/Writer finden file nicht Java Basics - Anfänger-Themen 3
S Streams - kleinstes Element finden Java Basics - Anfänger-Themen 4
L Koordinate mit meisten Überlappungen in 3D-Raum finden Java Basics - Anfänger-Themen 9
KogoroMori21 Größten gemeinsamen Teiler finden Java Basics - Anfänger-Themen 7
F Methoden Bitte Helft mir meinen Fehler zu finden. Möchte in diesem Bankenprogramm durch die Konsoleneingabe auswählen welches Konto reduziert und welches erhö Java Basics - Anfänger-Themen 17
Kirby.exe Fehlende Int Werte aus Array mit streams finden Java Basics - Anfänger-Themen 19
I Preis finden für ein Uber-App(?) Java Basics - Anfänger-Themen 3
L Classpath Alle Dateien im Classpath finden Java Basics - Anfänger-Themen 4
O Suchbaum Elternknoten finden Level eines Knoten bestimmen Java Basics - Anfänger-Themen 24
H pfad finden Java Basics - Anfänger-Themen 12
G Excle datei aus resources folder finden und lesen Java Basics - Anfänger-Themen 5
M Duplikate in Array finden... Java Basics - Anfänger-Themen 9
A Mit Rekursion Zufallszahlen erstellen und größte finden Java Basics - Anfänger-Themen 5
S Maxium aus einer File finden Java Basics - Anfänger-Themen 12
R HTTP-Links in Java Class finden Java Basics - Anfänger-Themen 3
S Substrings finden Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben