Baum Knoten zählen

Lazyyy

Mitglied
Hallo Zusammen,
Beschäftige mich derzeit mit Graphen spezieller mit Bäumen:
Problem ist Folgendes: gegeben ist ein Baum bzw ein Wurzelknoten und ich soll nun alle vorhandenen Knoten finden bzw zählen in meiner countNodes Methode:

Mein Gedanke ich packe jeden Knoten auf den Stack und zähle dabei einfach mit.
Der Stack ist mir allerings auch noch neu und bin mir nicht sicher ob ich das so richtig handhabe.. Vorallem das ich beim Stack so einen Integerwert benötige.
Code:
package de.ur.iw.adp.tree;

import java.util.Stack;

public class TreeNode {
    private final int content;
    private TreeNode left;
    private TreeNode right;

    public TreeNode(int content) {
        this.content = content;
    }

    public int content() {
        return content;
    }

    public TreeNode left() {
        return left;
    }

    public void setLeft(TreeNode node) {
        left = node;
    }

    public TreeNode right() {
        return right;
    }

    public void setRight(TreeNode node) {
        right = node;
    }

    public static int countNodes(TreeNode root) {
       int counter = 1;
       if(root == null){
           return 0;
       }
       Stack<Integer> stapel = new Stack<>();
       
       if(root != null){
           stapel.push(root.content());
       }
       while(stapel.empty() == false){
           TreeNode Node = new TreeNode(stapel.pop());      
           if(Node.right()!= null){
               stapel.push(Node.right().content());
               counter++;
           }
           if(Node.left()!= null){
               stapel.push(Node.left().content());
               counter++;
           }
           
       }
       
        return counter;
    }

VG Lazy
 

fhoffmann

Top Contributor
Du solltest das rekursiv lösen:
Eine Methode countNodes() (bitte nicht static) zählt sich selbst mit 1 und addiert dazu den Rückgabewert von left.countNodes() (falls left != null) und den Rückgabewert von right.countNodes() (falls right!= null).
Wenn du diese Methode für root aufrufst, erhälst du die Anzahl der Knoten des Baumes.
 

Lazyyy

Mitglied
Du solltest das rekursiv lösen:
Eine Methode countNodes() (bitte nicht static) zählt sich selbst mit 1 und addiert dazu den Rückgabewert von left.countNodes() (falls left != null) und den Rückgabewert von right.countNodes() (falls right!= null).
Wenn du diese Methode für root aufrufst, erhälst du die Anzahl der Knoten des Baumes.

ah ok so klappt es. Danke

Interesse halber würde mich noch die möglichkeit Interessieren die aufgabe mit dem Stack zu lösen. an welcher Stelle muss ich da in meinem Kode ansetzen ?
 

Joah

Mitglied
Ich glaube du hast einen Denkfehler gemacht. Ein Blatt im Baum kann nämlich beliebig viele Kinder haben...
Außerdem kannst du nicht den content des Knotens auf den Stack pushen und dann später daraus einen neuen TreeNode konstruieren, weil dann die Kindknoten (left / right verloren gehen).

Deine korrigierte (iterative) countNodes-Methode würde also so aussehen (getestet):
Java:
    public static int countNodes(TreeNode root) {
       int counter = 1;
       if(root == null) { // klammer nicht benoetigt
           return 0;
       }
       Stack<TreeNode> stapel = new Stack<>(); // korrektur auf treenode
      
       if(root != null){ //if nicht benoetigt da bereits oben abgefangen
           stapel.push(root);
       }
       while(stapel.empty() == false){
           TreeNode Node = stapel.pop(); // Korrektur    
           if(Node.right()!= null){
               stapel.push(Node.right()); // Korrektur. Ausserdem koennte man right direkt abrufen
               counter++;
           }
           if(Node.left()!= null){
               stapel.push(Node.left()); // Korrektur
               counter++;
           }
          
       }
      
        return counter;
    }

Schöner wäre aber so:
Java:
public int countNodes()
{
    int counter = 0;
    Stack<TreeNode> s = new Stack<>();
    s.push(this);
    while (!s.empty())
    {
        counter++;
        TreeNode n = s.pop();
        if (n.left != null)
            s.push(n.left);
        if (n.right != null)
            s.push(n.right);
    }
    return counter;
}
Wäre nur noch die Frage was schneller ist (iterativ oder rekursiv).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D spezifische Knoten in einem Baum zählen Java Basics - Anfänger-Themen 9
L B+Baum innere Knoten erstellen Java Basics - Anfänger-Themen 3
J Baum Knoten löschen Java Basics - Anfänger-Themen 10
Luk10 Anzahl der Knoten in einem Baum ausgeben! Java Basics - Anfänger-Themen 6
H B-Baum: Knoten Position als Parameter oder als Variable im Objekt? Java Basics - Anfänger-Themen 4
G eine Knoten aus einem Baum löschen. [SOLVED] Java Basics - Anfänger-Themen 7
HelpInneed Baum ausgeben (aber mal anders) Java Basics - Anfänger-Themen 3
G AVL-Baum Java Basics - Anfänger-Themen 1
G Rot-Schwarz-Baum Java Basics - Anfänger-Themen 8
L Baum aus Integer Liste erstellen Java Basics - Anfänger-Themen 0
CptK Interface Baum visualisieren Java Basics - Anfänger-Themen 37
CptK Best Practice Merge-Sort als Baum darstellen Java Basics - Anfänger-Themen 3
E Baum pfadweise durchlaufen Java Basics - Anfänger-Themen 11
O Naives links rechts einfügen in ADT Baum Java Basics - Anfänger-Themen 8
L Traversierungsverfahren Baum: LevelOrder Java Basics - Anfänger-Themen 17
L Rekursion im Baum Java Basics - Anfänger-Themen 9
D B-Baum einfügen und löschen Java Basics - Anfänger-Themen 2
F Aufgabe Rekursion Binärer Baum Java Basics - Anfänger-Themen 15
D Werte AVL-Baum löschen Java Basics - Anfänger-Themen 2
M Binären Baum Kinder setzen Java Basics - Anfänger-Themen 12
U 2-3-4 Baum Top-Down Java Basics - Anfänger-Themen 4
U 2-3-4 Baum Top-Down Java Basics - Anfänger-Themen 0
J Überprüfen, ob eine 2D Matrix ein Baum ist Java Basics - Anfänger-Themen 5
R Baum erzeugen Java Basics - Anfänger-Themen 61
B Baum Traversierung Postorder Java Basics - Anfänger-Themen 6
B OOP Über einen AVL-Baum iterieren (NullPointer) Java Basics - Anfänger-Themen 5
A Voller Baum Java Basics - Anfänger-Themen 7
S n-ärer Baum Java Basics - Anfänger-Themen 6
O Unterschied Baum <-> Automat Java Basics - Anfänger-Themen 2
K Tiefen- und Breitensuche beim Baum durch Stack und Warteschlange Java Basics - Anfänger-Themen 1
C kompletter baum Java Basics - Anfänger-Themen 2
M Collections Iterator und generischer Baum Java Basics - Anfänger-Themen 0
M Baum Code kurze frage ... Java Basics - Anfänger-Themen 6
D Ein Objekt in einem Baum finden und ausgeben. Java Basics - Anfänger-Themen 4
K Rot-Schwarz-Baum min und max-Tiefe Java Basics - Anfänger-Themen 1
A min() Methode Baum Java Basics - Anfänger-Themen 1
J Baum rekursiv durchlaufen Java Basics - Anfänger-Themen 2
T Baum mit Turtle zeichnen Java Basics - Anfänger-Themen 2
Screen 2,4 Baum Frage Java Basics - Anfänger-Themen 6
T Rot-schwarz Baum Problem Java Basics - Anfänger-Themen 3
A Rekursion in Baum und ArrayList als Rückgabe Java Basics - Anfänger-Themen 2
P Pythagoras Baum - Berechnung der Punkte Java Basics - Anfänger-Themen 9
C 2-3 Baum Java Basics - Anfänger-Themen 6
H Baum Java Basics - Anfänger-Themen 4
L Rot Scharz Baum von Binärbaum erben Java Basics - Anfänger-Themen 9
B Baum > Baum-Swing Java Basics - Anfänger-Themen 4
L eigenen Baum schreiben Java Basics - Anfänger-Themen 5
T Array in einen Baum zu überführen Java Basics - Anfänger-Themen 3
S Das reinschreiben einer Klasse in den Baum Java Basics - Anfänger-Themen 6
A Baum mit geometricfigur Werte Java Basics - Anfänger-Themen 6
D Datentypen Einfügen im RotSchwarz Baum Java Basics - Anfänger-Themen 2
F FileSystem in Baum darstellen/wurzel festlegen Java Basics - Anfänger-Themen 3
G List als Rückgabewert einer rekursiven Methode (Baum) Java Basics - Anfänger-Themen 3
I Baum graphisch darstellen Java Basics - Anfänger-Themen 2
P Binärer Baum mit Composite-Entwurfsmuster Java Basics - Anfänger-Themen 2
L Baum Swing AVL Java Basics - Anfänger-Themen 4
Binary.Coder 2-3-4 Baum vs. (2,4) Baum Java Basics - Anfänger-Themen 2
ModellbahnerTT Ab-Baum Applet Java Basics - Anfänger-Themen 3
P Baum-Menü in Java Java Basics - Anfänger-Themen 5
H Baum Java Basics - Anfänger-Themen 11
G AVL Baum Java Basics - Anfänger-Themen 20
J Baum spiegeln Java Basics - Anfänger-Themen 7
N 2-3 Baum, Einfügen Java Basics - Anfänger-Themen 5
G Rekursion mit Return - Baum durchlaufen Java Basics - Anfänger-Themen 4
G Baum Datenstruktur Java Basics - Anfänger-Themen 2
V Baum mit log n Aufwand für Einfügen und Löschen und. Java Basics - Anfänger-Themen 5
H Tiefensuche im binären Baum Java Basics - Anfänger-Themen 2
P Problem mit Darstellung im Baum Java Basics - Anfänger-Themen 4
G Binärer Baum Java Basics - Anfänger-Themen 3
M Binärer Baum Tiefe Java Basics - Anfänger-Themen 14
G universeller baum Java Basics - Anfänger-Themen 13
G Baum testen Java Basics - Anfänger-Themen 20
B Array To Baum Java Basics - Anfänger-Themen 2
B Baum to Array Java Basics - Anfänger-Themen 17
H Löschen in einem binären Baum führt zu einem StackOverflow Java Basics - Anfänger-Themen 2
L Binären Baum speichern Java Basics - Anfänger-Themen 6
R Pythagoras-Baum Java Basics - Anfänger-Themen 5
W Baum durchlaufen Java Basics - Anfänger-Themen 3
T binärer Baum Java Basics - Anfänger-Themen 3
P allg. Baum aus Liste Java Basics - Anfänger-Themen 2
J String in binären Baum umwandeln Java Basics - Anfänger-Themen 7
R binärer Baum Java Basics - Anfänger-Themen 2
F Abstrakte Klasse Baum Java Basics - Anfänger-Themen 6
H Liste Knoten NullPointerException Java Basics - Anfänger-Themen 7
Cassy3 Binärer Suchbaum Knoten rauslöschen Java Basics - Anfänger-Themen 1
Y Knoten an einem gegebenen Index aus einer Liste entfernen. Java Basics - Anfänger-Themen 6
Y Wie greift man auf die Knoten in einem Binärbaum zu? Java Basics - Anfänger-Themen 5
J ActionListener von JCheckBox im Knoten von JTree funktioniert nicht Java Basics - Anfänger-Themen 2
S Binärbäume knoten zählen Java Basics - Anfänger-Themen 16
T Collections Methode (Knoten hinzufügen) für Graphen Java Basics - Anfänger-Themen 32
H Knoten-Reihenfolge einer LinkedList invertieren Java Basics - Anfänger-Themen 11
G Binärer Suchbaum Knoten zählen Java Basics - Anfänger-Themen 1
M Dijkstra Algorithmus in Graphen auf mehrere verschiedene Knoten anwenden lassen Java Basics - Anfänger-Themen 11
O Suchbaum Elternknoten finden Level eines Knoten bestimmen Java Basics - Anfänger-Themen 24
O Knoten und Liste verarbeitung Java Basics - Anfänger-Themen 20
E Knoten eines Baumes unter Bedinung zählen Java Basics - Anfänger-Themen 2
R Methoden Entferne alle identische Knoten (Typ String) aus verkettete Liste Java Basics - Anfänger-Themen 8
L Graphen: Anzahl Knoten // Knoten in Array speichern Java Basics - Anfänger-Themen 4
I Erste Schritte Referenz zum Knoten davor, in einer Liste Java Basics - Anfänger-Themen 4
J Max. Anzahl von Knoten im Binärbaum Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben