ERLEDIGT
JA
JA
ANTWORTEN
13
13
ZUGRIFFE
2444
2444
EMPFEHLEN
-
hallo allerseits,
ich hab folgendes problem. ich soll eine methode schreiben die rekursiv aufgerufen wird um die anzhal der knoten in einem binärbaum zu zählen. hier ist mal mein vorschlag, leider klappts nicht so wie ich will. danke schon mal im vorraus
// Gibt die Anzahl der Knoten im Baum zurück.
// node ist die Wurzel des aktuellen (Teil)baums.
public static int countNodes(BinaryNode node)
{
int z1 = 0;
int z2 = 0;
int zaehler = 0;
if(node.getLeft()!=null)
{
countNodes(node.getLeft());
z1++;
}
if (node.getRight()!=null)
{
countNodes(node.getRight());
z2++;
}
zaehler = z1 + z2;
return zaehler;
}
-
03.05.11 22:14 #2
- Registriert seit
- Jun 2009
- Beiträge
- 868
Code bitte unbedingt in die dafür vorgesehenen Tags (siehe meine Signatur).
kleiner Tipp: dein Code ist zwar rekursiv, allerdings verwendest du die Ergebnisse der weiteren Methodenaufrufe nicht! Stattdessen wird nur die oberste Ebene des Binärbaumes gezählt.
So wäre es richtig:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
public static int countNodes(BinaryNode node){ int zaehler = 0; if(node.getLeft()!=null) { zaehler += countNodes(node.getLeft()); zaehler++; } if (node.getRight()!=null) { zaehler += countNodes(node.getRight()); zaehler++; } zaehler = z1 + z2; return zaehler; }
Besser wäre allerdings, du würdest keine Rekursion verwenden, das führt zu unnötiger Speicherbelastung!Code bitte so einfügen: [java]System.out.println("Hallo");[/java] (Analog für andere Programmiersprachen)
hilfreich zu Java: Really Big Index, Java ist auch eine Insel Band 1 und Band 2.Code java:1
System.out.println("Hallo");
___________
Ubuntu Bug #1: Microsoft has a majority market share
Casecon: Projekt leiser Käse
-
danke ich werds mal testen.
die rekursion muss ich leider machen da das in der aufgabe so vorgegeben ist
-
04.05.11 00:43 #4
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.885
- Blog-Einträge
- 29
Hallo,
schau mal hier:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
package de.tutorials; public class BinTreeExample { public static void main(String[] args) { Node left3 = new Node(); Node right2 = new Node(); Node left2 = new Node(left3,null); Node right1 = new Node(left2,right2); Node left1 = new Node(); Node left0 = new Node(left1,right1); Node right0 = new Node(); Node root = new Node(left0, right0); System.out.println(countNodes(root)); } private static int countNodes(Node node) { return node == null ? 0 : 1 + countNodes(node.left) + countNodes(node.right); } static class Node{ Node left; Node right; public Node(){} public Node(Node left, Node right) { this.left = left; this.right = right; } } }
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
vielen dank für die schnelle hilfe, hat super geklappt
-
das würde mich aber auch zu noch einer anderen frage bringen. wie kann man nun prüfen ob ein binärbaum vollständig ist? hier mein vorschlag.
Code :1 2 3 4 5 6 7 8 9 10
public static boolean isComplete(BinaryNode node) { if ( node != null) { return true; } else { return isComplete(node.getLeft()) && isComplete(node.getRight()); } }
allerdings gibt diese methode immer nur true zurück weil ich nicht genau weiss wie ich den false-teil einbauen muss
-
04.05.11 12:54 #7
Ein unvollständiger Binärbaum ist doch, wenn ein Knoten genau einen Kindknoten hat, oder? Ich hatte soetwas leider nie gelernt
Er wäre vollständig, wenn beide Knoten null oder beide Knoten nicht null sind, der Rückgabewert wäre demzufolge gleich.
Geändert von HonniCilest (04.05.11 um 13:08 Uhr)
Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.
-
04.05.11 20:43 #8
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.885
- Blog-Einträge
- 29
Hallo,
schau mal hier: (gemäß der Definition von oben)
Code java:1 2 3
private static boolean isComplete(Node node) { return node != null && (isComplete(node.left) == isComplete(node.right)); }
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
@ HonniCilest, also eine Definition die ich gefunden habe lautet: ein vollständiger Baum hat auf jedem Niveau die maximal mögliche Knotenzahl und sämtliche Blätter haben diesselbe Tiefe, so das zur info
.
@Thomas, vielen Dank für deinen Tip. Ich werde es später noch testen und morgen posten ob es funktioniert
-
05.05.11 10:20 #10
Dann müsste man da vermutlich eher Mathematisch herangehen... Ich denke aber du benötigst die Maximale Tiefe deines Baumes, die musst du irgendwo herbekommen. Ansonsten hast du ja bereits die Anzahl der Knoten. Also müsste reintheoretisch eine Gleichung zu bilden sein *nachdenk*...
Knotenanzahl = 2^Baumtiefe-1 <-- (oder so ähnlich)
Dann kannst du die so errechnete Knotenanzahl mit der tatsächlichen Knotenanzahl vergleichen.Jeder Fehler, aus dem wir lernen, ist ein Erfolg...
...Aber mach' nicht den Fehler, nicht aus deinen Fehlern zu lernen.
-
danke für alle tips hat alles gut geklappt
-
Hallo zusammen,
um nicht nen neuen Thread aufzumachen möchte ich hier meine Frage reinstellen in der Hoffnung vll. den ein oder anderen Tipp zu bekommen, und zwar muss ich die Anzahl der Blätter zählen. Ich habe folgenden Code entwickelt:
Code :1 2 3 4 5 6 7 8 9 10 11 12
public static int countLeaves(BinaryNode node) { if (node == null) return 0; else if (node.left == null && node.right == null) return 1; else return countLeaves(node.getLeft()) + countLeaves(node.getRight()); }
kann das so richtig sein?
-
joa das is ganz gut das habe ich auch so
-
klasse
Du hast du schon den Aufgabenteil2 ? Irgendwie ansatumäßig was gescheihtes? du weißt worum es geht nehm ich an
die Höhe des B-Baums etc.
... ich brauch unbedingt 2 Punkte für diese Aufgabe ...
Ähnliche Themen
-
Wörter in einem Textfeld zählen
Von spoooner im Forum Visual Basic 6.0Antworten: 8Letzter Beitrag: 16.04.06, 02:56 -
Knoten-Attribute einer xsd-Datei in einem JTree auslesen
Von Perplex im Forum XML TechnologienAntworten: 0Letzter Beitrag: 20.07.05, 18:24 -
Bilder in einem Ordner zählen!
Von maeg im Forum PHPAntworten: 5Letzter Beitrag: 24.05.05, 11:00 -
Wie kann man Knoten einer XML-Datei zählen ?
Von Goldman im Forum .NET ArchivAntworten: 1Letzter Beitrag: 22.03.04, 22:10 -
Datein in einem Verzeichnis zählen
Von Aeris im Forum PHPAntworten: 1Letzter Beitrag: 27.11.01, 16:58





Zitieren


Login





