Binärbaum grafisch ausgeben

papabaer1707

Aktives Mitglied
Hallo, ich möchte (einfach) einen Binärbaum grafisch ausgeben. Mit einfach meine ich, dass ich dies lediglich zu Testzwecken, d. h. zum Testen verschiedener Operationen des ADT Baum, durchführen möchte. Zur Beurteilung des Problems dürfte folgendes wichtig sein:
1. Baum wurde erzeugt:
Code:
     myBinBaum.einfuegen(13);
     myBinBaum.einfuegen(8);
     myBinBaum.einfuegen(20);
     myBinBaum.einfuegen(10);
     myBinBaum.einfuegen(5);
2. Auf einem JPanel soll das Ganze gezeichnet werden:
Code:
public class MyCanvasPanelBinBaum extends JPanel {

  private BinBaum myBinBaum;
  private String[] contents;
  private int abstandX = 30; // vertikaler Abstand zwischen den Knoten
  private int abstandY = 20; // horizontaler Abstand zwischen den Knoten
  private int mitte;
  
  public MyCanvasPanelBinBaum(BinBaum aBinBaum) {
      this.myBinBaum = aBinBaum;
  }
  
  private void zeichneInOrder(Graphics g, BinKnoten knoten, int tiefe) {
        if (knoten != null) {
          zeichneInOrder(g,knoten.getLinks(),tiefe++);
          int pos = 0;
          while (knoten.getContent() != Integer.parseInt(contents[pos])) {
             pos++;
          }
          g.drawString(contents[pos],20+pos*abstandX,20+tiefe*abstandY);
          zeichneInOrder(g,knoten.getRechts(),tiefe++);
        }
  }

  @Override
  public void paintComponent(Graphics g) {
    super.paintComponent(g);

    g.setColor(new Color(255,255,255));
    g.fillRect(0,0,this.getWidth(), this.getHeight());
    
    String s = myBinBaum.inOrder();
    contents = myBinBaum.inOrder().split(" ");
    
    g.setColor(new Color(0,0,0));
    
    // Knoten ausgeben
    zeichneInOrder(g,myBinBaum.getWurzel(),0);
  }
}

3. Meine Grundidee besteht darin, die Inorder-Ausgabe (hier: "5 8 10 13 20 ") für die vertikale Position zu nutzen -> das funktioniert! Ein rekursiver Durchlauf soll dann in der entsprechenden Tiefe den Wert des Knotens ausgeben - das funktioniert nur zum Teil, d. h. ich erhalte folgendes Bild:

Code:
  5   8          13
            10         20

Wenn ich den Programmablauf verfolge stelle ich fest, dass der Wert für Tiefe sich nur für die rechten Teilbäume ändert, d. h. 5, 8 und 13 haben die Tiefe 1; 10 und 20 die Tiefe 2. Das kann ich mir nicht erklären ... hat da jemand eine Idee?
 
Zuletzt bearbeitet:

papabaer1707

Aktives Mitglied
Ich werd verrückt. Damit funktioniert es:
Code:
zeichneInOrder(g,knoten.getLinks(),tiefe=tiefe+1);

Was ist der Unterschied zwischen tiefe++ und tiefe=tiefe+1? Und noch schlimmer: Darf das in dieser Stelle überhaupt stehen?
 

Marco13

Top Contributor
Bei tiefe++ wird ERST ausgewertet und DANN erhöht.

int a = 4;
System.out.println(a++); // Gibt 4 aus
System.out.println(a); // Gibt 5 aus
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H LayoutManager RPG Programmieren, eigenes Spielfeld grafisch generieren aus Tileset AWT, Swing, JavaFX & SWT 18
Y Objekte grafisch darstellen ohne GMF - Composite auf Canvas? AWT, Swing, JavaFX & SWT 2
H Swing Arbeitsspeicherauslastung anderer Programme grafisch darstellen AWT, Swing, JavaFX & SWT 16
M Array grafisch darstellen AWT, Swing, JavaFX & SWT 9
D Swing Bresenham Linienalgorithmus grafisch darstellen AWT, Swing, JavaFX & SWT 6
H Rechteck grafisch ausgeben (2D) AWT, Swing, JavaFX & SWT 3
M Swing Prozentwerte grafisch darstellen - wie? AWT, Swing, JavaFX & SWT 4
F "Objekte" mit "Verbindungen" grafisch darstellen AWT, Swing, JavaFX & SWT 4
G Statistik grafisch ausgeben AWT, Swing, JavaFX & SWT 6
P Netz grafisch darstellen AWT, Swing, JavaFX & SWT 4
G Button auswerten und ausgeben ob richtig oder falsch AWT, Swing, JavaFX & SWT 1
G Versionscode aus build.gradle in Java-Klasse ausgeben lassen AWT, Swing, JavaFX & SWT 14
Encera ArrayList mit eigenen Objekten in JavaFX sortieren und ausgeben AWT, Swing, JavaFX & SWT 50
J Eingaben aus Textfield & ComboBox speichern und in ComboBox wieder ausgeben AWT, Swing, JavaFX & SWT 3
donnico2 Objekte in der GUI ausgeben mit Hilfe einer DAO AWT, Swing, JavaFX & SWT 1
A Titelleiste soll Pfad ausgeben AWT, Swing, JavaFX & SWT 16
P Swing Zufallsbilder auf Frame ausgeben AWT, Swing, JavaFX & SWT 1
T Anderen Java Code durch Code kompilieren und Fehler in Label ausgeben AWT, Swing, JavaFX & SWT 5
M Swing Objekt Array in GUI ausgeben AWT, Swing, JavaFX & SWT 1
B Textfelder in einer ListView ausgeben AWT, Swing, JavaFX & SWT 13
G Eingabe in JTextField in Array speichern und in JList ausgeben AWT, Swing, JavaFX & SWT 7
S GUI Kreuz zeichnen und Position ausgeben AWT, Swing, JavaFX & SWT 3
J Datensatz in jTable ausgeben AWT, Swing, JavaFX & SWT 3
M JavaFX JavaFX ResultSet in TableView ausgeben AWT, Swing, JavaFX & SWT 2
J Event Handling Input auf String testen, Fehlermeldung ausgeben AWT, Swing, JavaFX & SWT 4
T [Neuling] Textfeld Inhalt überprüfen und falsche Stellen als msg Ausgeben AWT, Swing, JavaFX & SWT 1
T JOptionPane Dialog plus Rechnung ausgeben AWT, Swing, JavaFX & SWT 1
K Swing GridLayout - x und y bei Mausklick ausgeben AWT, Swing, JavaFX & SWT 4
sandaime Swing 3 JComboBoxen ausgelesen Elemente einzel ausgeben AWT, Swing, JavaFX & SWT 6
C JavaFX mehrere Kreise nach Eingabeprozess ausgeben AWT, Swing, JavaFX & SWT 2
S Höhendaten in einer Grafik ausgeben AWT, Swing, JavaFX & SWT 2
L Array mit JButton, wie rausfinden auf welche JButton geklickt wurde + index des JButtons ausgeben AWT, Swing, JavaFX & SWT 4
K Pfad mit JFileChooser ausgeben lassen AWT, Swing, JavaFX & SWT 7
B Map, Set oder List in GUI ausgeben AWT, Swing, JavaFX & SWT 5
F Swing String[] in JTextArea ausgeben. Jeder Eintrag in neue Zeile, aber ohne "\n"- Geht das? AWT, Swing, JavaFX & SWT 3
B Text auf Display ausgeben [LWJGL] AWT, Swing, JavaFX & SWT 2
V GUI mit Swing -> Wenn IP eingegeben Domain ausgeben AWT, Swing, JavaFX & SWT 15
precoc Konsole in GUI ausgeben AWT, Swing, JavaFX & SWT 8
MiMa Dateien aus Ordner in einer JList Ausgeben AWT, Swing, JavaFX & SWT 32
MiMa Integer Zahl in Textfield ausgeben AWT, Swing, JavaFX & SWT 12
P Elemente einer JList ausgeben AWT, Swing, JavaFX & SWT 11
B Swing Komponente an Position eines Objektes ausgeben lassen AWT, Swing, JavaFX & SWT 3
A mehrere Zeilen in GUi ausgeben AWT, Swing, JavaFX & SWT 2
D SpinnerDateModel NUR Uhrzeit ausgeben AWT, Swing, JavaFX & SWT 7
C ausgewählte JtoggleButton als Variablenwert ausgeben AWT, Swing, JavaFX & SWT 14
C Konsolenausgabe in TextArea ausgeben AWT, Swing, JavaFX & SWT 8
T jSlider-Value als Float in jLabel ausgeben AWT, Swing, JavaFX & SWT 2
J Bitmaps nebeneinander ausgeben AWT, Swing, JavaFX & SWT 4
A Formatierten String ausgeben (drawString) AWT, Swing, JavaFX & SWT 5
M Swing Eine andere Klasse über Button starten und in TextArea ausgeben AWT, Swing, JavaFX & SWT 13
S Swing Grundprinzip String ausgeben, aber wie? AWT, Swing, JavaFX & SWT 6
S AWT Arrays in externer jTable Klasse ausgeben AWT, Swing, JavaFX & SWT 3
P Datenelement anderer Klasse in JTextArea ausgeben AWT, Swing, JavaFX & SWT 4
M Swing Eingabe auf JTextField automatisch ausgeben auf JLabel AWT, Swing, JavaFX & SWT 2
maddin86 Eingabe in Textfeld 1 synchron in Textfeld 2 ausgeben AWT, Swing, JavaFX & SWT 9
R String in JFrame ausgeben AWT, Swing, JavaFX & SWT 10
H Swing variable in Numberfield ausgeben AWT, Swing, JavaFX & SWT 5
P Swing ComboBox(en) in JTable auslesen und ausgeben AWT, Swing, JavaFX & SWT 11
D Event in Fenster ausgeben + Observer + kein Plan AWT, Swing, JavaFX & SWT 2
C Value eines RadioButtons ausgeben AWT, Swing, JavaFX & SWT 6
S SWT Fehlermeldung ausgeben AWT, Swing, JavaFX & SWT 7
D Feedback in Fenster ausgeben AWT, Swing, JavaFX & SWT 4
B Exceptions werfen und in JTextArea ausgeben AWT, Swing, JavaFX & SWT 4
S Würfelnetz in Java ausgeben möglich? AWT, Swing, JavaFX & SWT 4
P List in JTextField ausgeben AWT, Swing, JavaFX & SWT 8
R for-Schleife in Applet ausgeben AWT, Swing, JavaFX & SWT 3
J DB in JTable ausgeben... AWT, Swing, JavaFX & SWT 3
T ArrayList aus KlasseA in KlasseB in JTextArea ausgeben AWT, Swing, JavaFX & SWT 12
N Swing JList Elemente ausgeben fehlerhaft AWT, Swing, JavaFX & SWT 4
S Arrayinhalt nach Klicken des Buttons im Fenster ausgeben AWT, Swing, JavaFX & SWT 27
radiac AWT Mausposition als String ausgeben??? AWT, Swing, JavaFX & SWT 5
T Texte farbig ausgeben AWT, Swing, JavaFX & SWT 2
D Objekt (Map) in Textfeld ausgeben AWT, Swing, JavaFX & SWT 10
G Process in JTextArea ausgeben AWT, Swing, JavaFX & SWT 4
T Swing Sql Tabellen in jList ausgeben und speichern AWT, Swing, JavaFX & SWT 4
B Datensätze einer Datenbank in JTable ausgeben AWT, Swing, JavaFX & SWT 14
L SWT-Table: Datum ausgeben? AWT, Swing, JavaFX & SWT 5
A Statusinformationen realtime ausgeben AWT, Swing, JavaFX & SWT 9
G Markierte MenüItems des JCombobox - Popups ausgeben AWT, Swing, JavaFX & SWT 7
R Flächeninhalt ausgeben AWT, Swing, JavaFX & SWT 7
A Dateien in TextArea ausgeben AWT, Swing, JavaFX & SWT 6
L DOS-Rückgabe auf einem JPanel ausgeben AWT, Swing, JavaFX & SWT 5
G Zeilenweise ausgeben! AWT, Swing, JavaFX & SWT 2
X JTextArea Text ausgeben mit setText(a) aber wie? AWT, Swing, JavaFX & SWT 3
A JTable: Zeit in Spalte ausgeben AWT, Swing, JavaFX & SWT 2
G Datensätze aus DB in TextFeld ausgeben AWT, Swing, JavaFX & SWT 18
L JTree Frage -> nur den Wert des Knotens ausgeben? AWT, Swing, JavaFX & SWT 2
L nur den JTree Knoten auf der Console ausgeben? AWT, Swing, JavaFX & SWT 6
G Textfeld auslesen und auf der Konsole ausgeben? AWT, Swing, JavaFX & SWT 10
A Strings in JTable fett ausgeben - ohne! HTML AWT, Swing, JavaFX & SWT 10
G Aktuelle Mausposition auslesen und ausgeben AWT, Swing, JavaFX & SWT 2
H Text auf JLabel ausgeben? AWT, Swing, JavaFX & SWT 2
L Farbregler - Werte als Zahl ausgeben - Color AWT, Swing, JavaFX & SWT 5
R einige wörter fettgedruckt ausgeben AWT, Swing, JavaFX & SWT 2
G Bild ausgeben mit Swing AWT, Swing, JavaFX & SWT 8
L Header von ausgewählte Spalten ausgeben AWT, Swing, JavaFX & SWT 6
C Inhalte in immer das gleiche Fenster ausgeben? AWT, Swing, JavaFX & SWT 3
R Gewählte Zeile aus JTable ausgeben lassen AWT, Swing, JavaFX & SWT 17
L 2 Dimensionales Array als Tabelle ausgeben lassen AWT, Swing, JavaFX & SWT 8
S mehrzeilige texte ausgeben AWT, Swing, JavaFX & SWT 10

Ähnliche Java Themen

Neue Themen


Oben