import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import mk.nds.adt.*;  //alternativ können die beiligenden Klassen BinTree mit Inhaltstyp Zeichenkette und Queue verwendet werden

/**
 *
 * Beschreibung: Vorlage zu Aufgabe 5 und 6
 *
 * @version 2.0 vom 29.09.2025
 * @author Ylva Brandt 
 */

public class VorlageAufgabe5 extends JFrame {
  // Anfang Attribute
  BinTree suchbaum = new BinTree();
  
  private JButton bInorder = new JButton();
  private JTextArea jTextArea1 = new JTextArea("");
  private JScrollPane jTextArea1ScrollPane = new JScrollPane(jTextArea1);
  private JButton bLevelorder = new JButton();
  private JButton bSuche = new JButton();
  private JTextField jTextField1 = new JTextField();
  private JButton bEinfuegen = new JButton();
  private JButton bLoeschen = new JButton();
  private JButton bPreorder = new JButton();
  private JButton bPostorder = new JButton();
  // Ende Attribute
  
  public VorlageAufgabe5() { 
    // Frame-Initialisierung
    super();
    setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
    int frameWidth = 582; 
    int frameHeight = 300;
    setSize(frameWidth, frameHeight);
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    int x = (d.width - getSize().width) / 2;
    int y = (d.height - getSize().height) / 2;
    setLocation(x, y);
    setTitle("VorlageAufgabe5");
    setResizable(false);
    Container cp = getContentPane();
    cp.setLayout(null);
    // Anfang Komponenten
    bPostorder.setBounds(200, 18, 75, 25);
    bPostorder.setText("postorder");
    bPostorder.setMargin(new Insets(2, 2, 2, 2));
    bPostorder.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        bPostorder_ActionPerformed(evt);
      }
    });
    cp.add(bPostorder);
    bPreorder.setBounds(104, 18, 75, 25);
    bPreorder.setText("preorder");
    bPreorder.setMargin(new Insets(2, 2, 2, 2));
    bPreorder.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        bPreorder_ActionPerformed(evt);
      }
    });
    cp.add(bPreorder);
    bLoeschen.setBounds(184, 105, 97, 25);
    bLoeschen.setText("löschen");
    bLoeschen.setMargin(new Insets(2, 2, 2, 2));
    bLoeschen.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        bLoeschen_ActionPerformed(evt);
      }
    });
    cp.add(bLoeschen);
    bEinfuegen.setBounds(96, 105, 81, 25);
    bEinfuegen.setText("einfügen");
    bEinfuegen.setMargin(new Insets(2, 2, 2, 2));
    bEinfuegen.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        bEinfuegen_ActionPerformed(evt);
      }
    });
    cp.add(bEinfuegen);
    jTextField1.setBounds(8, 152, 193, 33);
    cp.add(jTextField1);
    bSuche.setBounds(11, 105, 75, 25);
    bSuche.setText("suche");
    bSuche.setMargin(new Insets(2, 2, 2, 2));
    bSuche.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        bSuche_ActionPerformed(evt);
      }
    });
    cp.add(bSuche);
    bLevelorder.setBounds(11, 59, 75, 25);
    bLevelorder.setText("levelorder");
    bLevelorder.setMargin(new Insets(2, 2, 2, 2));
    bLevelorder.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        bLevelorder_ActionPerformed(evt);
      }
    });
    cp.add(bLevelorder);
    jTextArea1ScrollPane.setBounds(376, 24, 177, 209);
    cp.add(jTextArea1ScrollPane);
    bInorder.setBounds(11, 18, 75, 25);
    bInorder.setText("inorder");
    bInorder.setMargin(new Insets(2, 2, 2, 2));
    bInorder.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
        bInorder_ActionPerformed(evt);
      }
    });
    cp.add(bInorder);
    
    // Ende Komponenten
    
    setVisible(true);

    suchbaum.setItem("Luna");
    suchbaum.setLeft(new BinTree("Hanna"));
    suchbaum.setRight(new BinTree("Robert"));
    suchbaum.getLeft().setLeft(new BinTree("Emil"));
    suchbaum.getLeft().setRight(new BinTree("Igor"));
    suchbaum.getRight().setLeft(new BinTree("Max"));
    suchbaum.getRight().setRight(new BinTree("Siri"));
    suchbaum.getLeft().getLeft().setRight(new BinTree("Frida"));
    suchbaum.getRight().getLeft().setRight(new BinTree("Ole"));
    
    
  } // end of public VorlageAufgabe5
  
  // Anfang Methoden
  
  public static void main(String[] args) {
    new VorlageAufgabe5();
     
  } // end of main
  
  
  //Aufgabe 5b
  public void bPreorder_ActionPerformed(ActionEvent evt) {
    String aus = preorder(suchbaum);
    jTextArea1.setText(aus);
  }
  
  public String preorder(BinTree b){
    String ausgabe = "";
    if (!b.isEmpty()) {
      ausgabe = ausgabe + b.getItem() + "\n";
      ausgabe = ausgabe + preorder(b.getLeft());
      ausgabe = ausgabe + preorder(b.getRight());
    }
    return ausgabe;
  }
  
  public void bInorder_ActionPerformed(ActionEvent evt) {
      
  } 
  
  public String inorder(BinTree b){
    String ausgabe = "";
    return ausgabe;
  }
  
  public void bPostorder_ActionPerformed(ActionEvent evt) {
   
  }
  
  public String postorder(BinTree b){
    String ausgabe = "";
    return ausgabe;
  }
  
  public void bLevelorder_ActionPerformed(ActionEvent evt) {
   
  } 
  
  public String levelorder(BinTree b){
    String ausgabe = "";
    return ausgabe;
  }
  
  //Vorlage zu Aufgabe 5c
  public void bSuche_ActionPerformed(ActionEvent evt) {
    
  }
  
  //Die Operation suche sucht den Namen rekursiv im linken oder rechten Teilbaum bis der Name gefunden wurde oder
  //kein weiteres Kind mehr vorhanden ist
  public BinTree suche(String name, BinTree b){
    return b; //Platzhalter für den gesuchten Algorithmus
  }
  
  //Vorlage zu Aufgabe 5d
  public void bEinfuegen_ActionPerformed(ActionEvent evt) {
     
  }
  
  //Das Vorgehen ist ähnlich zur suche. Es wird von der Wurzel entsprechend des Sortierkriteriums abgestiegen, 
  //bis ein Knoten gefunden wird, bei dem der neue Wert als Kind angefügt werden kann
  public void einfuegen(String neu, BinTree b){
  
  }
  
  //Vorlage zu Aufgabe 6
  public void bLoeschen_ActionPerformed(ActionEvent evt) {
       
  }
  
  public BinTree loeschen(String wert, BinTree b){
     return b; //Platzhalter für den gesuchten Algorithmus
  }
  
  //sucht den kleinsten Wert in einem Baum
  //angewendet auf den rechten Teilbaum, wird der Nachfolger eines Knotens gefunden
  public BinTree sucheKleinsten(BinTree b){
    return b; //Platzhalter für den gesuchten Algorithmus
  }
  
  //Prüfe rekursiv, ob der Inhaltswert der Wurzel des linken oder rechten Teilbaums der gesuchte Wert ist
  //dann kann der aktuelle Teibaum mit dem Vater als Wurzel zurückgegeben werden
  public BinTree sucheVater(String wert, BinTree b){
    return b; //Platzhalter für den gesuchten Algorithmus
  }

} // end of class VorlageAufgabe5
