Binären Baum speichern

Status
Nicht offen für weitere Antworten.
L

LLimit

Gast
Hi!
Ich weiß zwar nicht sicher, ob das noch zu den Anfängerfragen gehört, aber da ich mich noch für einen Anfänger halten, denke ich mal, dass ich hier richtig bin ;)

Also, ich habe einen binären Baum geschrieben. Die Klasse heißt Tree und die Struktur sieht wie folgt aus:

Code:
public class Tree
{
    private Element wurzel;
    private Tree left;
    private Tree right;

    public Tree()
    {
        this.wurzel = null;
    }
    
    public Tree(Object x)
    {
        this.wurzel = new Element(x);
        this.left = new Tree();
        this.right = new Tree();
    }
}

Er ist also rekursiv, wie ihr seht.
Der Baum wird also unbegrenzt groß und ich möchte den jetzt speichern und laden können.
Wie mache ich das am besten? Mein Lehrer hatte mir ursprünglich eine andere Element-Klasse gegeben in der zwei weitere Elemente (left und right) vorhanden waren. Wenn man da nur die wurzel speichern würde, würde Java alle anhängenden Elemente mit speichern, da sie eine direkte Verbindung zur Wirzel haben.
Ich habe mir nun allerdings vorgenommen aus Definitionsgründen die Variabeln left und right in die Klasse Tree zu setzen - das macht Sinn und mien Lehrer würde es so auch besser finden, wenn das mit dem Speichern jetzt noch klappen würde.
Gibt es da irgendeinen Trick, dass Java den kompletten Baum mit einem Befehl speichert?

Ich danke schonmal im Vorraus für Antworten und Tips.

Mit freundlichem Gruß, Alex
 

Illuvatar

Top Contributor
Du musst den Baum das Interface Serializable implementieren lassen, dann kannst du einen ObjechtOutputStream erzeugen, und den Baum darein schreiben.
Allerdings sollten dann auch alle Objekte, auf die du referenzierst, Serializable implementieren. (Also auf jeden Fall die Element Klasse, sonst weiß ich ja nicht. Strings und primitive Datentypen (uvm) sind eh Serializable)
 

Bleiglanz

Gesperrter Benutzer
mach einfach Tree serializable

=> dann reicht es den obersten Knoten zu speichern

(man kann dann auch ganz einfach "Teile" davon speichern)

BTW: was ist mit "speichern" eigentlich gemeint...?
 
L

LLimit

Gast
Hi! Vielen Dank für die schnellen Antworten :)
Mit "speichern" meine ich die Informationen inklusive der Verbindungen in eine ascii-datei zu speichern um den Inhalt des Baums später wieder einlesen zu können.

Nun zu den Antworten... so wirklich versteh ich euch leider nich :)
Wie genau kann ich den Tree serialisierbar machen? Bin wie gesagt anfänger :D Also son kleiner code schnipsel oder n Link zu nem howto wär recht hilfreich.

Aber trotzdem auf jeden Fall schonmal Vielen Dank!
Gruß, Alex
 
L

Leroy42

Gast
LLimit hat gesagt.:
Wie genau kann ich den Tree serialisierbar machen?
Code:
public class Tree implements Serializable {}
und da deine Klasse Tree ein Member Element besitzt
Code:
public class Element implements Serializable {}

Falls Element wieder Instanzen selbsterstellter Klassen besitzt auch diese Klassen serializable machen

Mit "speichern" meine ich die Informationen inklusive der Verbindungen in eine ascii-datei zu speichern um den Inhalt des Baums später wieder einlesen zu können.

Wenn es eine ASCII-Datei sein soll, hilft dir die Serialisierung leider nicht, da die Daten hierbei binär
gespeichert werden.

In diesem Fall mußt du dir eigene Methoden schreiben. Die sind eigentlich nicht schwer
(Stichwort: Rekursiv) allerdings muß du zusätzlich Information in die Datei schreiben die
dir beim Einlesen zeigen wann welcher Teilbaum neu beginnt damit der Baum wieder genau
so aufgebaut wird wie er vorher war. Du kannst beispielsweise eineindeutige IDs vergeben oder
Zeilennummern
 
G

Guest

Gast
Wow, danke!

Code:
import java.io.*;

public class Tree implements Serializable

Das habe ich in die Tree klasse eingefügt und alles hat super funktioniert!
Die Elementklasse war bereits so definiert (habe die nicht selbst geschrieben ;)).
Ob ASCII-Datei jetzt der richtige Begriff war weiß ich nicht. Sollte halt ne normale Text-Datei sein :)

Code:
public void save () {
        try {
            FileOutputStream datei =
            new FileOutputStream("/home/alex/baum.txt");

      try {
          ObjectOutputStream object = new ObjectOutputStream(datei);
          try {
              object.writeObject(tree1);
              object.flush();
          }
          catch(IOException e)
          {System.out.println("Fehler beim Schreiben des Objektes"); }
          datei.close();
      }
      catch(IOException e)
      {System.out.println("Fehler beim Anlegen des Streams (schreiben)"); }
        }
        catch(FileNotFoundException e)
        {System.out.println("Fehler beim oefnen der Datei zum Schreiben"); }
    }

    public void load() {
        try {
            FileInputStream datei =
            new FileInputStream("/home/alex/baum.txt");
        try {
                ObjectInputStream object = new ObjectInputStream(datei);
            try {
                    tree1=(Tree)object.readObject();
        }
            catch(ClassNotFoundException e)
        {System.out.println("Fehler beim Lesen des Objektes"); }
            datei.close();
        }
            catch(IOException e)
        {System.out.println("Fehler beim Anlegen des Streams (lesen)"); }
        }
        catch(FileNotFoundException e)
        {System.out.println("Fehler beim ???oeffnen der Datei zum Lesen"); }
    }

Die funktionen gehen genau so, wie ich das wollte. Kann den Baum mit Struktur speichern und laden - genial :)
Herzlichen Dank nochmal an alle für die super schnelle Hilfe![/code]
 

André B.

Bekanntes Mitglied
Das ist aber keine Textdatei wenn du das Serialisierst. Ne Textdatei wäre das, wenn da dann stehen würde wie:
Code:
Dies ist ein Binärbaum in einer Textdatei....

Wenn du das Serialisierst, wird das ganze allerdings in eine Binärdatei geschrieben. Wenn du also ne Textdatei haben willst/sollst, dann muss du deinen Baum in Text umwandeln, d.h. jeden Ast und so irgendwie als Text darstellen, sodass du nachher noch den zusammenhang hast und das ganze wiederherstellen kannst.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Binären Baum Kinder setzen Java Basics - Anfänger-Themen 12
H Tiefensuche im binären Baum Java Basics - Anfänger-Themen 2
H Löschen in einem binären Baum führt zu einem StackOverflow Java Basics - Anfänger-Themen 2
J String in binären Baum umwandeln Java Basics - Anfänger-Themen 7
L Binären Bäume für beliebige Datentypen Java Basics - Anfänger-Themen 15
U Input/Output Elemente eines Binären Suchbaums ausgeben Java Basics - Anfänger-Themen 10
C Methoden Methode zu einem Binären Suchbaum Java Basics - Anfänger-Themen 8
L Indorder Traversierung eines binären Suchbaumes Java Basics - Anfänger-Themen 1
T Rekursiv Tiefe eines binären Suchbaums ermitteln Java Basics - Anfänger-Themen 22
T Algorithmus zur Überprüfung eines binären Suchbaums Java Basics - Anfänger-Themen 2
N Binären Suchbaum erstellen, nachzuvollziehen Java Basics - Anfänger-Themen 0
W binären Suchbaum Kantenanzahl Java Basics - Anfänger-Themen 3
K Datentypen Umwandlung einer Textfeldeingabe in einen binären Wert Java Basics - Anfänger-Themen 2
J Ebene eines binären Baumes Java Basics - Anfänger-Themen 3
N Tiefe im binären Suchbaum Java Basics - Anfänger-Themen 9
A OOP Binären Datenstrom in Datei schreiben Java Basics - Anfänger-Themen 4
E Alternativen zur binären Serialisierung ? Java Basics - Anfänger-Themen 9
N Rekursive Berechnung der Höhe eines binären Baumes Java Basics - Anfänger-Themen 4
G Pfadlänge eines binären Suchbaums Java Basics - Anfänger-Themen 4
G suchen und ersetzen in einer binären Datei Java Basics - Anfänger-Themen 4
D spezifische Knoten in einem Baum zählen Java Basics - Anfänger-Themen 9
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
L Baum Knoten zählen Java Basics - Anfänger-Themen 6
L B+Baum innere Knoten erstellen Java Basics - Anfänger-Themen 3
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
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
J Baum Knoten löschen Java Basics - Anfänger-Themen 10
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
Luk10 Anzahl der Knoten in einem Baum ausgeben! Java Basics - Anfänger-Themen 6
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
H B-Baum: Knoten Position als Parameter oder als Variable im Objekt? Java Basics - Anfänger-Themen 4
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
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
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
G eine Knoten aus einem Baum löschen. [SOLVED] Java Basics - Anfänger-Themen 7
P allg. Baum aus Liste Java Basics - Anfänger-Themen 2
R binärer Baum Java Basics - Anfänger-Themen 2
F Abstrakte Klasse Baum Java Basics - Anfänger-Themen 6
M Länge eines Arrays als Variable speichern möglich? Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Neue Themen


Oben