Input/Output Elemente eines Binären Suchbaums ausgeben

undercover

Aktives Mitglied
Moin Leute,
Ich bräuchte mal eure Hilfe.
Ich möchte einen Text in einen Binären Suchbaum einlesen. Am Ende soll er Mehrfacheinträge berücksichtigen ( z.B. drei mal das Wort "Hallo"), soweit bin ich allerdings noch nicht.
Ich stecke Momentan an einer anderen Stelle.
Ich lese eine Textdatei mittels BufferedReader ein :
Java:
String input;
        BinaryTree tree = new BinaryTree();
        BufferedReader in = new BufferedReader(new FileReader(filename));
        while (in.ready()) {
            input = in.readLine();
            tree.insert(input);
Hinter filename steckt der Dateipfad zu einem Textdokument welches unsortiert Wörter und Zeichen jeweils eins in einer Zeile gespeichert hat.
Mein Binärbaum sieht wie folgt aus :
Java:
public class BinaryTree {
    static class TreeNode {
        TreeNode left;
        TreeNode right;
        Object key;

        public int compareKeyTo(Comparable c) {
            return (key == null ? -1 : ((Comparable) key).compareTo(c));
        }

        public TreeNode(Object o) {
            key = o;
        }

        public Object getKey() {
            return key;
        }

        public TreeNode getLeft() {
            return left;
        }

        public TreeNode getRight() {
            return right;
        }

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

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

        public String toString() {
            return key.toString();
        }
    }

    private TreeNode head;
    private TreeNode nullNode;

    public BinaryTree() {
        head = new TreeNode(null);
        nullNode = new TreeNode(null);
        head.setRight(nullNode);
        nullNode.setLeft(nullNode);
        nullNode.setRight(nullNode);
    }

    protected TreeNode findNode(Comparable c) {
        TreeNode n = head.getRight();
        while (n != nullNode) {
            int cmp = n.compareKeyTo(c);
            if (cmp == 0)
                return n;
            else
                n = (cmp > 0 ? n.getLeft() : n.getRight());
        }
        return null;
    }

    public boolean find(Comparable c) {
        return (findNode(c) != null);
    }

    public boolean insert(Comparable c) {
        TreeNode parent = head;
        TreeNode child = head.getRight();
        while (child != nullNode) {
            parent = child;
            int cmp = child.compareKeyTo(c);
            if (cmp == 0)
                return false;
            else
                child = (cmp > 0 ? child.getLeft() : child.getRight());
        }
        TreeNode node = new TreeNode(c);
        if (parent.compareKeyTo(c) > 0)
            parent.setLeft(node);
        else
            parent.setRight(node);
        node.setLeft(nullNode);
        node.setRight(nullNode);
        return true;

    }

}

Wie könnte ich prüfen ob mein Baum alles richtig abgespeichert hat? Dazu müsste ich den Baum ja komplett durchsuchen, wie printe ich das Ergebnis leserlich aus?
 

undercover

Aktives Mitglied
Hi
habe ich probiert, mein Ansatz war
Java:
public void printInorder(TreeNode n){
        if(n != nullNode){
            printInorder(n.getLeft());
            System.out.println(n.toString());
            printInorder(n.getRight());
        }
    }
Die Methode steht nach meiner insert Methode. In der BinaryTree Klasse.
Das Ganze wollte ich nach dem Einlesen durch den BufferedReader in meiner Klasse TextOutout ausgeben.
Leider klappt der Aufruf nicht.
 

JCODA

Top Contributor
Versuchs mal so:

Java:
public void printInorder(){
        if(getLeft().getKey() != null){
            getLeft().printInorder();
        }        
        System.out.println(getKey());
        if(getRight().getKey() != null){
            getRight().printInorder();
        }
    }
 

undercover

Aktives Mitglied
@Flown , das ist mein Problem, ich muss ja die Wurzel für den Aufruf übergeben. Ich stehe gerade auf dem Schlauch an welcher Stelle und wie ich ihn aufrufe.
@Meniskusschaden , die Prüfung umgehe ich indem ich Pseudoknoten , head und nullNode, einführe. Der Test auf einen leeren Baum und auf null-Verweise entfallen dann ja.
 

Meniskusschaden

Top Contributor
@Flown , das ist mein Problem, ich muss ja die Wurzel für den Aufruf übergeben. Ich stehe gerade auf dem Schlauch an welcher Stelle und wie ich ihn aufrufe.
tree.printInorder(tree.head);
@Meniskusschaden , die Prüfung umgehe ich indem ich Pseudoknoten , head und nullNode, einführe. Der Test auf einen leeren Baum und auf null-Verweise entfallen dann ja.
Dann bin ich mal gespannt, ob wirklich keine NullPointerException fliegt.;)
 

Flown

Administrator
Mitarbeiter
Java:
public void printInOrder() {
  printInOrder(head);
}

private void printInOrder(TreeNode n){
  if(n != nullNode){
    printInorder(n.getLeft());
    System.out.println(n.toString());
    printInorder(n.getRight());
  }
}
 

undercover

Aktives Mitglied
@Flown danke habe die die Methoden in meiner BinaryTree Klasse nach der insert Methode implementiert, aufgerufen nach dem BufferedReader in meiner TextOut Klasse.
@Meniskusschaden , du hast recht mir fliegt eine NullPointerException um die Ohren. Wieso das, dachte meine Pseudo... verhindern das.
Ich muss sagen der Baum sieht komisch aus, wenn ich ihn im debugger angucke. Mir scheint es das er beim einlesen folgendes macht: (Wörter und Zeichen im Textdokument)
Head - left : "null" ; right "Jeder";
Jeder - left : "." ; right "mag"
. - left : null ; right : null;
mag - left : "Obst" ; right : "ist";

Normal müsste doch der "." an oberster Stelle stehn, so zu sagen die Wurzel.
 

Meniskusschaden

Top Contributor
Um dir einen visuellen Eindruck zu verschaffen, kannst du ja erst einmal null-Prüfungen einbauen (ob die nach Fehlerbeseitigung entfallen können, kannst du ja später entscheiden) und beim Aufruf von printInOrder(TreeNode) die Knotentiefe übergeben, damit du bei der Ausgabe eine entsprechende Einrückung vorsehen kannst. Wenn du dann noch in umgedrehter inOrder-Reihenfolge ausgibst (links und rechts vertauschen) hast du einen um 90 Grad gedrehten Baum. Dann könntest du nach jeder Einfügung den Baum drucken. So würde sich für ich bin ein toller satzfolgende Ausgabe ergeben:
Code:
null
-----------
.ich
null
-----------
.ich
..bin
null
-----------
.ich
...ein
..bin
null
-----------
..toller
.ich
...ein
..bin
null
-----------
..toller
...satz
.ich
...ein
..bin
null
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Elemente eines Arrays bei Ausgabe auslassen Java Basics - Anfänger-Themen 2
W ArrayList löscht alle Elemente bis auf eines Java Basics - Anfänger-Themen 2
M Elemente eines Arrays verschieben Java Basics - Anfänger-Themen 9
E Elemente innerhalb eines Arrays vergleichen Java Basics - Anfänger-Themen 7
W elemente eines arrays in einen string schreiben Java Basics - Anfänger-Themen 3
A Wie greif ich auf Elemente eines Arrays in einem Vektor zu? Java Basics - Anfänger-Themen 6
K Elemente eines Array verschieben Java Basics - Anfänger-Themen 18
S Elemente eines Arrays in Console eingeben Java Basics - Anfänger-Themen 5
N bestimmte Elemente eines Stringtokenizers Java Basics - Anfänger-Themen 3
E Elemente eines Vectors verändern Java Basics - Anfänger-Themen 4
N Ich kriege ganze zeit die Fehlermeldung "Inhalt der Zwischenablage kann nicht in die ausgewählten Elemente eingefügt werden" hat jemand eine Lösung? Java Basics - Anfänger-Themen 6
E Elemente aus Liste entfernen und hinzufügen Java Basics - Anfänger-Themen 3
J 2 listen vergleichen, die auch null Elemente haben können ! Java Basics - Anfänger-Themen 9
B bei 2 Arrays Anzahl gleicher Elemente vergleichen? Java Basics - Anfänger-Themen 49
frager2345 Aufgabe Hash Objekt Elemente ausgeben Java Basics - Anfänger-Themen 2
A Elemente in einem Array Java Basics - Anfänger-Themen 5
J Methoden Die Reihenfolge der Iterator-Elemente umkehren Java Basics - Anfänger-Themen 3
M ArrayList<TreeNode<T>> fortlaufende Nummerierung der Elemente Java Basics - Anfänger-Themen 5
Cassy3 Binäre Bäume Rekursiv durchlaufen und bestimmte Elemente Zählen Java Basics - Anfänger-Themen 6
B Verkettete Liste durchgehen und einzelne Elemente in neue Liste tun Java Basics - Anfänger-Themen 9
D Array Elemente sortieren in aufsteigender Reihenfolge Java Basics - Anfänger-Themen 10
Bademeister007 Elemente aus zwei verschiedenen Arrays miteinander vergleichen und gegeben falls entfernen Java Basics - Anfänger-Themen 14
T SCC Elemente Java Basics - Anfänger-Themen 0
L ArrayList auf 4 Elemente begrenzen Java Basics - Anfänger-Themen 56
H Array Elemente Java Basics - Anfänger-Themen 17
T Elemente aus Array zu TableView JavaFX übertragen Java Basics - Anfänger-Themen 2
J Array Elemente werden nicht gefunden! Java Basics - Anfänger-Themen 6
GAZ String replace() Elemente tauschen Java Basics - Anfänger-Themen 13
J Array; Elemente kopieren Java Basics - Anfänger-Themen 17
V Array aus Klasse um vererbte Elemente erweitern Java Basics - Anfänger-Themen 3
S Laufzeit Quicksort wenn alle Elemente gleich sind Java Basics - Anfänger-Themen 4
A Array Elemente extrahieren ! Java Basics - Anfänger-Themen 4
J Elemente in einem 2D-Array summieren Java Basics - Anfänger-Themen 6
Kirby.exe Anzahl vorkommender Elemente im Array zählen Java Basics - Anfänger-Themen 9
M Matrix auf 4 Elemente untersuchen mit offenen Enden Java Basics - Anfänger-Themen 8
M Matrix Elemente vergleichen Java Basics - Anfänger-Themen 11
I Alle Elemente von zwei Listen vergleichen Java Basics - Anfänger-Themen 1
L String zerlegen & elemente hinzufügen Java Basics - Anfänger-Themen 5
L Anzahl der Elemente key in einem Array mit log(N) Laufzeit Java Basics - Anfänger-Themen 4
L Erste Schritte Elemente zwei Schlangen vergleichen Java Basics - Anfänger-Themen 14
E Elemente aus Liste löschen Java Basics - Anfänger-Themen 5
L Array Elemente verschieben Java Basics - Anfänger-Themen 5
S Elemente in Liste einfügen Java Basics - Anfänger-Themen 2
D jsoup.select findet keine elemente Java Basics - Anfänger-Themen 2
F JList Elemente mit Strings vergleichen Java Basics - Anfänger-Themen 12
M Elemente in einer ArrayList einander zuordnen. Java Basics - Anfänger-Themen 18
T Klassen Doppelte Elemente aus Container entfernen Java Basics - Anfänger-Themen 6
G Verkettete Liste - Neu erzeugte Elemente werden nicht ausgegeben Java Basics - Anfänger-Themen 5
GreenTeaYT HashMap dupliziert meine Elemente? Java Basics - Anfänger-Themen 2
J Elemente in Array speichern, löschen, ... Java Basics - Anfänger-Themen 3
arjoopy Kapselung Elemente aus Objekt-Array ausgeben Java Basics - Anfänger-Themen 8
M ComboBox bestimmte Elemente disablen/ausgrauen Java Basics - Anfänger-Themen 3
K Anzahl gleicher Elemente in Array Java Basics - Anfänger-Themen 32
M LinkedList elemente löschen Java Basics - Anfänger-Themen 2
D Klassen Doppelt so viele Elemente in Arraylist ? Java Basics - Anfänger-Themen 4
V Elemente aus einem Array mit null überschreiben Java Basics - Anfänger-Themen 4
A Methoden Char-Arrays auf aufeinanderfolgende Elemente vergleichen! Java Basics - Anfänger-Themen 7
C Array Elemente Paarweise vertauschen Java Basics - Anfänger-Themen 2
kilopack15 Array auf doppelte Elemente überprüfen Java Basics - Anfänger-Themen 16
W Elemente aus einer anderen GUI steuern! Java Basics - Anfänger-Themen 13
R warum kann System.out.println(..) etwas, was Swing-Elemente Nicht können ? Java Basics - Anfänger-Themen 11
R Elemente eine Liste im Ring schliessen Java Basics - Anfänger-Themen 9
B generische LinkedList nach Häufigkeit der Elemente füllen Java Basics - Anfänger-Themen 6
B in einem abstrakten Set ,Elemente einer einfache verkettete List epeichern Java Basics - Anfänger-Themen 13
M Klassen Gesamt speicherbare Elemente in Vector? Java Basics - Anfänger-Themen 3
A Anzahl der Elemente in einem Stack wiedergeben Java Basics - Anfänger-Themen 3
O Rekursiver Durchlauf verschachtelter Elemente Java Basics - Anfänger-Themen 1
P Vector durchsuchen und Elemente löschen Java Basics - Anfänger-Themen 4
R Variablen [GELÖST]Elemente in Array um Schrittweite s verschieben Java Basics - Anfänger-Themen 2
1 Wie addiert man die Elemente einer Verketteten Liste? Java Basics - Anfänger-Themen 5
T Erste Schritte Elemente finden, deren Name erst "zusammengesetzt" wird Java Basics - Anfänger-Themen 8
A Eindeutige Elemente aus Array extrahieren Java Basics - Anfänger-Themen 9
gamebreiti Gui menu ArrayList Elemente wiedererkennen Java Basics - Anfänger-Themen 3
C Matrixmultiplikation ohne einzelne Elemente aufzurufen Java Basics - Anfänger-Themen 2
V wie kann ich in zweidimensionaller Arraylist auf die einzelnen Elemente zugreifen ? Java Basics - Anfänger-Themen 7
W wie legt man die elemente der liste k Mal fest ? Java Basics - Anfänger-Themen 7
S Anzahl unterschiedlicher Elemente zählen Java Basics - Anfänger-Themen 4
G Performance - höhere Anzahl Swing Elemente Java Basics - Anfänger-Themen 5
C ArrayList - überschreibt Elemente Java Basics - Anfänger-Themen 7
A Mehrere 100.000 Elemente verlgeichen Java Basics - Anfänger-Themen 8
A JList Elemente in ein andres JList Adden Java Basics - Anfänger-Themen 5
B Zweidimensionales Array Elemente jeder Spalte zählen Java Basics - Anfänger-Themen 9
L Rückwärtsausgabe der Array-Elemente Java Basics - Anfänger-Themen 5
1 Elemente von 2 Arrays vergleichen Java Basics - Anfänger-Themen 12
1 Minimum aller Elemente in einem Array bestimmen Java Basics - Anfänger-Themen 10
M aus x Elementen y Elemente auswählen Java Basics - Anfänger-Themen 6
J Eingabe Elemente Aktivieren Java Basics - Anfänger-Themen 2
R Best Practice Elemente aus ArrayList entfernen (performant) Java Basics - Anfänger-Themen 6
G String Elemente auf Zahlen Überprüfen Java Basics - Anfänger-Themen 21
T Elemente im Array umdrehen Java Basics - Anfänger-Themen 9
L Elemente zufällig in ein Array verteilen Java Basics - Anfänger-Themen 12
T Wieviel Array-Elemente Java Basics - Anfänger-Themen 19
M Elemente im DefaultListModel separat auslesen Java Basics - Anfänger-Themen 2
T Collections Zugriff auf Elemente aus Iterator() Schleife Java Basics - Anfänger-Themen 4
P BitSet- Objekt- Anzahl der Elemente bestimmen Java Basics - Anfänger-Themen 2
S JPA / Elemente einer Liste ansprechen Java Basics - Anfänger-Themen 5
B mit einem Iterrator elemente aus einer liste löschen Java Basics - Anfänger-Themen 3
Mrtwomoon Collections Hashset elemente ohne Eckigeklammer ausgeben Java Basics - Anfänger-Themen 9
W Elemente in einem Array nach 'oben' verschieben Java Basics - Anfänger-Themen 9
M Vector überschreibt Elemente bei add()-Methode Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben