Binäre Bäume Rekursiv durchlaufen und bestimmte Elemente Zählen

Cassy3

Mitglied
Hey Leute, ich habe wieder ein Wunderschönes Anfängerproblem und hoffe, ihr könnt mir helfen.
Ich habe einen Binären Suchbaum. Durch diesen soll ich Rekursiv durch gehen und zählen, wie viele meiner Mitarbeiter älter sind als das übergebene Jahr.

Mein Code sieht so aus:
Java:
    public int filter (int year) {
        if (root ==null) {
            return 0;
        }
        else {
            return filter(0, year, root);
        }
    }
    
    public int filter (int count, int geburtsjahr, EmployeeTreeNode currentNode) {
        
            if (currentNode.getEmployee().getYearOfBirth()<geburtsjahr) {
                count++;
                System.out.println(currentNode.getEmployee().getYearOfBirth());
                System.out.println(count);
            }
            
            if (currentNode.getLeftSuccessor()!=null) {
                filter (count, geburtsjahr,currentNode.getLeftSuccessor());
            }
            
            if (currentNode.getRightSuccessor()!=null) {
                filter(count, geburtsjahr,currentNode.getRightSuccessor());
            }
                
        return count;
    }

Meine Ausgabe dann so:
Java:
1900
1
1901
2
Anzahl an Mitarbeitern die Älter sind als vom Jahre 2010: 0

Ich verstehe das nun wirklich nicht. Könnte mir irgendwer erklären, warum das Count in der if übernommen wird und dann unten in der Return scheinbar die Inkrementation komplett ignoriert? Ich danke schonmal für jede Hilfe :)
 

mihe7

Top Contributor
Könnte mir irgendwer erklären, warum das Count in der if übernommen wird und dann unten in der Return scheinbar die Inkrementation komplett ignoriert?
Naja, Du verwendest den Rückgabewert ja nirgends. Zum Beispiel rufst Du in Zeile 19 zwar filter auf und die Methode gibt einen Wert zurück aber Du machst mit dem Wert nix.
 

Cassy3

Mitglied
Naja, Du verwendest den Rückgabewert ja nirgends. Zum Beispiel rufst Du in Zeile 19 zwar filter auf und die Methode gibt einen Wert zurück aber Du machst mit dem Wert nix.
Könntest du mir das nochmal genauer Erklären? Weil in Zeile 19 und 23 soll ja auch an sich nicht viel gemacht werden, da da ja nur weiter im baum Spaziert werden soll und dann, wenn er wieder an einem Anderen Knoten ist erneut überprüfen, ob der Mitarbeiter älter ist. Er zählt das alles ja auch vernünftig. Siehe Ausgabe 1,2 (erste If)
Aber wenn es dann darum geht, diese Zahl auszugeben, funktioniert nichts. Verstehst du, wie ich das meine und wo wahrscheinlich mein Denkfehler liegt?
 

mihe7

Top Contributor
Dein Denkfehler liegt darin, zu glauben, dass "count" nur einmal existiert. Tatsächlich existiert count für jeden Methodenaufruf separat.
 

Cassy3

Mitglied
Danke, ich habe den Fehler gefunden, so funktioniert es.
Java:
    public int filter (int count, int geburtsjahr, EmployeeTreeNode currentNode) {
        
        
            if (currentNode.getEmployee().getYearOfBirth()<geburtsjahr) {
                count++;
            }
            
            if (currentNode.getLeftSuccessor()!=null) {
                count=filter (count, geburtsjahr,currentNode.getLeftSuccessor());
            }
            
            if (currentNode.getRightSuccessor()!=null) {
                count=filter(count, geburtsjahr,currentNode.getRightSuccessor());
            }
                
        return count;
    }

Jedoch wäre ich dankbar, wenn du mir erklären könntest, wieso es so ist, dass count mehrere Male existiert :)
 

mihe7

Top Contributor
Für den Methodenaufruf wird ein Speicherbereich auf dem Stack eingerichtet, der sog. Stackframe. In dem finden sich neben Platz für die lokalen Variablen auch die Rücksprungadresse (der Rechner muss ja wissen, an welche Stelle man zurückkehren muss) und die übergebenen Parameter. Wenn die Methode zurückkehrt, wird der Stackframe vom Stapel genommen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Binäre Bäume Java Basics - Anfänger-Themen 7
pkelod Binäre Darstellung Bitwise-Operator Java Basics - Anfänger-Themen 10
M binäre Suche im Intervall Java Basics - Anfänger-Themen 6
M binäre Suche Java Basics - Anfänger-Themen 4
amelie123456 Lineare Suche / Binäre Suche Java Basics - Anfänger-Themen 2
K Warum ist die binäre Suche bei der verketteten Liste nicht so effektiv? Java Basics - Anfänger-Themen 3
RudiRüssel Binäre Suche, unsortiert, lokales Maximum Java Basics - Anfänger-Themen 15
S Binäre-Suche Algorithmus Java Basics - Anfänger-Themen 1
S Binäre-Suche bei unsortierten Daten Java Basics - Anfänger-Themen 7
S binäre semaphore Java Basics - Anfänger-Themen 4
L Binäre Suche mit Comparator Java Basics - Anfänger-Themen 5
Aprendiendo Gibt es in der JAVA-API eine Funktion, die eine Dezimalzahl in eine binäre Zahl umwandelt? Java Basics - Anfänger-Themen 8
H Erste Schritte Binäre Suche Java Basics - Anfänger-Themen 37
A Binäre Addition Java Basics - Anfänger-Themen 15
H Rekursion Binäre Suche Java Basics - Anfänger-Themen 2
L Binäre Suche Java Basics - Anfänger-Themen 2
N Array, lineare Suche, binäre Suche, Programm bleibt unerwartet stehen... Java Basics - Anfänger-Themen 6
B Binäre Suche - Junit Test Java Basics - Anfänger-Themen 6
J Binäre Suche eines Array Java Basics - Anfänger-Themen 5
M Methoden Binäre Suche als rekursive Variante Java Basics - Anfänger-Themen 5
B Binäre Suche in einem String Array Java Basics - Anfänger-Themen 10
V Binäre Suchbäume Java Basics - Anfänger-Themen 1
M Binäre Suche Fehler überall =( Java Basics - Anfänger-Themen 2
M Compiler-Fehler Binäre Zahlen in Dezimalzahlen umrechnen Java Basics - Anfänger-Themen 3
K binäre Suchbäume Java Basics - Anfänger-Themen 3
D Binäre Suche für Integerarray in rekursiver Funktion Java Basics - Anfänger-Themen 5
A Binäre Addition Java Basics - Anfänger-Themen 5
W Compiler-Fehler Binäre Suche Java Basics - Anfänger-Themen 2
S Multi-Threaded Binäre Suche Java Basics - Anfänger-Themen 29
A Binäre Suche Java Basics - Anfänger-Themen 2
W Binäre Suche Java Basics - Anfänger-Themen 8
O String Binäre Suche Java Basics - Anfänger-Themen 6
M Binäre Suche, Elemente einfügen Java Basics - Anfänger-Themen 2
0x7F800000 wie pack ich komplette objekte in binäre dateien? Java Basics - Anfänger-Themen 4
A Binäre Suche; Java Basics - Anfänger-Themen 6
F Binäre Exponentiation Java Basics - Anfänger-Themen 9
M binäre Daten als Double einlesen Java Basics - Anfänger-Themen 22
M binäre daten einlesen Java Basics - Anfänger-Themen 2
G Binäre Suchbaum + Erstellung des Programmes Java Basics - Anfänger-Themen 4
R Binäre logische Operatoren Java Basics - Anfänger-Themen 21
P Bäume Java Basics - Anfänger-Themen 13
E Bäume/ allgemeine Fragen Java Basics - Anfänger-Themen 21
G Rot-Schwarz-Bäume Java Java Basics - Anfänger-Themen 10
M Rot Schwarz Bäume, ausführen? Java Basics - Anfänger-Themen 6
L Binären Bäume für beliebige Datentypen Java Basics - Anfänger-Themen 15
B Theorie Rot-Schwarz-Bäume Java Basics - Anfänger-Themen 2
D Klausur Vorbereitung: Listen, Rekursion, Bäume & Vererbung Java Basics - Anfänger-Themen 3
M Bäume und Listener Java Basics - Anfänger-Themen 2
L 2-3-4 Bäume Konstruktor Java Basics - Anfänger-Themen 2
W Bäume - containsValueRec Java Basics - Anfänger-Themen 2
R Crashkurs Listen / Bäume Java Basics - Anfänger-Themen 10
J bäume Java Basics - Anfänger-Themen 5
C Bäume in Java. Knoten in Array speichern Java Basics - Anfänger-Themen 3
C Bäume in Java. Code funktioniert nicht Java Basics - Anfänger-Themen 12
G Tertiäre Bäume Java Basics - Anfänger-Themen 2
G Bäume implementieren Java Basics - Anfänger-Themen 7
F Bäume in Java Java Basics - Anfänger-Themen 4
F Bäume zeichnen Java Basics - Anfänger-Themen 5
D n-näre Bäume (DOM) durchsuchen Java Basics - Anfänger-Themen 4
G Frage zur Bäume ? Java Basics - Anfänger-Themen 3
L [Aufgabe] Huffman Bäume Java Basics - Anfänger-Themen 10
H Passwort Brute Force rekursiv Java Basics - Anfänger-Themen 7
1 Array rekursiv durchlaufen Java Basics - Anfänger-Themen 8
E Rekursiv Objekte erzeugen - geht das? Java Basics - Anfänger-Themen 2
R0m1lly Kombinationen aus int array rekursiv Java Basics - Anfänger-Themen 2
L Rekursiv gegebenes Passwort herausfinden. Java Basics - Anfänger-Themen 2
P9cman Char Index rekursiv finden Java Basics - Anfänger-Themen 4
B Methoden Rekursiv festellen, ob eine Zahl gerade-oft vorkommt oder nicht Java Basics - Anfänger-Themen 4
S Methoden Methodenaufruf rekursiv zählen Java Basics - Anfänger-Themen 4
B Array nach Wert prüfen rekursiv Java Basics - Anfänger-Themen 5
sashady Zahlen rekursiv zerlegen und Ziffern addieren Java Basics - Anfänger-Themen 38
jhCDtGVjcZGcfzug Fibonacci Zahlen rekursiv und iterativ Java Basics - Anfänger-Themen 21
H Binominalkoeffizient tail-rekursiv in java darstellen Java Basics - Anfänger-Themen 0
GAZ Tribonacci Folge Rekursiv Java Basics - Anfänger-Themen 11
G Primzahlen von Rekursiv nach Iterativ Java Basics - Anfänger-Themen 6
A Ackermmanfunktion rekursiv Java Basics - Anfänger-Themen 4
A Binärbaum rekursiv durchsuchen und Referenz zurückgeben Java Basics - Anfänger-Themen 4
H Rekursiv Methode ausführen bei Kindern Java Basics - Anfänger-Themen 12
G Methode Rekursiv umschreiben Java Basics - Anfänger-Themen 8
L Jede zweite Ziffer entfernen (rekursiv) Java Basics - Anfänger-Themen 6
J Dateien in Verzeichnissen rekursiv auflisten wirft Exception Java Basics - Anfänger-Themen 4
D Pentagonale Nummern in Rekursiv Java Basics - Anfänger-Themen 14
O Enum Array Rekursiv abarbeiten Java Basics - Anfänger-Themen 44
E Weg-Suche-Problem rekursiv Java Basics - Anfänger-Themen 12
O Primzahl rekursiv mit einem Wert ohne i, wie? Java Basics - Anfänger-Themen 6
E Erste Schritte Potenz Negativ (rekursiv) Java Basics - Anfänger-Themen 2
O Rekursiv aufrufen Java Basics - Anfänger-Themen 2
F In List Rekursiv suchen Java Basics - Anfänger-Themen 12
F Iterativ in Rekursiv Java Basics - Anfänger-Themen 2
S Fibonacci Zahlen rekursiv Java Basics - Anfänger-Themen 1
L Rekursiv zwei Strings vergleichen Java Basics - Anfänger-Themen 3
B Fakultätsfunktion Rekursiv Berechnen aber mit Array Java Basics - Anfänger-Themen 10
J Fibonacci -Folge rekursiv berechnen Java Basics - Anfänger-Themen 18
B Wie kann ich Linien rekursiv zeichnen? Java Basics - Anfänger-Themen 4
kilopack15 Sin(x) rekursiv lösen Java Basics - Anfänger-Themen 17
T Rekursiv Tiefe eines binären Suchbaums ermitteln Java Basics - Anfänger-Themen 22
P Methoden Arrays.AsList kleinste Zahl ausgeben Rekursiv Java Basics - Anfänger-Themen 9
W A hoch N Rekursiv Java Basics - Anfänger-Themen 3
K Rechtecke rekursiv zeichnen Java Basics - Anfänger-Themen 20
V Quadrate rekursiv zeichnen Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben