Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Anzahl Knoten im Binären Baum » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 10 Beiträge
eulerscheZahl

Ich gebe dir ein ja Daumen hoch
Batista

@eulerscheZahl
Kannst du bitte folgendes ansehen, und kurzes ja oder nein, ob die Methode richtig funktioniert ?
/** Anzahl der Knoten zaehlen */
public int anzahlKnoten() {
return anzahlKnoten(wurzel);
}
/** Rekursive anzahlKnoten */
private int anzahlKnoten(Knoten k){
if (k==null){
return 0;
}else{
return 1 + anzahlKnoten(k.links)+anzahlKnoten(k.rechts);
}
}
eulerscheZahl

Richtig, und genau das Verhalten ist gewünscht, wenn man will, dass entweder nur Ganzzahlen oder nur Gleitpunktzahlen im Baum stehen.
Und wenn ein anderer Programmierer deine Klasse verwendet, weist ihn bereits der Compiler in die Schranken, wenn er es doch versucht. Andernfalls könnte es zu einer RuntimeException führen, die der Programmierer vielleicht gar nicht entdeckt, sondern erst der Endanwender.
Batista

Ich dachte ich hätte es verstanden

Man hat den code

code
....
public int anzahlKnoten(Knoten<INHALT> knoten) {

... code


public static void main(String[] args) {
Knoten<Integer> k1 = new Knoten<Integer>(3, null, null);
Knoten<Float> k2 = new Knoten<Float>(3.2f, null, null);
k1.suche(k2);
}


würde
The method suche(Knoten<Integer>) in the type Knoten<Integer> is not applicable for the arguments (Knoten<Float>)
das liefern?
eulerscheZahl

Bitte im Zusammenhang zitieren.
Der Codeausschnitt oberhalb des Zitats funktioniert bei Generics nicht mehr, und das ist genau der Sinn von Generics. Du kannst hier schon zur Compilezeit sicherstellen, dass nicht verschiedene Datentypen vermischt werden.
Batista

Zitat:
Original von eulerscheZahl

du siehst, ich habe Integer und Float vermischt. Wenn du den generischen Typ angibst (also Knoten<INHALT>), funktioniert das nicht.
The method suche(Knoten<Integer>) in the type Knoten<Integer> is not applicable for the arguments (Knoten<Float>)

.


Hier sagst du doch Knoten<INHALT>) funktioniert nicht? aber genau das verwendest du hier?
eulerscheZahl

Batista,
ich dachte, das hätten wir HIER geklärt?
Batista

Ist der <INHALT> wichtig?
public int anzahlKnoten(Knoten<INHALT> knoten) {

kann man nicht auch
public int anzahlKnoten(Knoten knoten) { schreiben?
vickal93

Ist mir auch grad aufgefallen, aber habe den Fehler in der anzahlKnoten() Methode beseitigt. smile Danke nochmal!
eulerscheZahl

Irgendwo musst du die aktuelle Position speichern, wo du dich im Baum befindest und von welchem Knoten du die Kinder zählen willst.
Bei der Höhe hast du es ja auch auf die Weise gemacht.

PS: habe oben einen Fehler: wenn die wurzel null ist, gibt es bei mir eine Exception, die beim letzten Test auch ausgelöst wird.
Es sind weitere Beiträge zu diesem Thema vorhanden. Klicken Sie hier, um sich alle Beiträge anzusehen.