Sie sind auf Seite 1von 4

public class Binaerbaum { public static int baum[]; // Baum wird initialisert.

public Binaerbaum(int groesse) { baum = new int[groesse]; // Legt fest, wie viele Werte im Baum gespeichert werden knnen. System.out.println("Der Baum wurde angelegt."); leeren(); // Der Binrbaum wird geleert. } public static void leeren() // In dieser Methode wird der Baum komplett gelscht. { int i; for(i = 0; i < baum.length; i++) { baum[i] = -1; } System.out.println("Der Baum ist komplett geleert."); } public static void insert(int zahl, int wo) // In dieser Methode werden Zahlen in den Baum eingefgt. { if(baum[wo] == -1) // Wenn ein leerer Knoten (-1 = leerer Knoten) vorhanden ist... { baum[wo] = zahl; // ... dann setze die Zahl in den Knoten. // System.out.println("Zahl '" + baum[wo] + "' wurde im Knoten '" + wo + "' abgelegt."); } else // Wenn der Knoten nicht leer ist... { if(zahl < baum[wo]) // ... und die Zahl kleiner als die Zahl in dem Knoten ist,... insert(zahl, 2*wo); // ... dann gehe in den linken Knoten und rufe die insert-Methode erneut auf. else insert(zahl, 2*wo+1); // ... dann gehe in den rechten Knoten und rufe die insert-Methode erneut auf. } } public static void display_flat_hp(int wo) { if (baum[wo] != -1) // es gibt den Knoten { display_flat_hp(wo*2); // mache links etwas... System.out.println(baum[wo]); // mache etwas mit dem aktuellen Knoten display_flat_hp(wo*2+1); // mache rechts etwas... } } public static void inorder(int wo) { if (baum[wo] != -1) // es gibt den Knoten { inorder(wo*2); // mache links etwas... System.out.println(baum[wo]); // mache etwas mit dem aktuellen Knoten inorder(wo*2+1); // mache rechts etwas...

public static void preorder(int wo) { if (baum[wo] != -1) // es gibt den Knoten { System.out.println(baum[wo]); // mache etwas mit dem aktuellen Knoten preorder(wo*2); // mache links etwas... preorder(wo*2+1); // mache rechts etwas... } } public static void postorder(int wo) { if (baum[wo] != -1) // es gibt den Knoten { postorder(wo*2); // mache links etwas... postorder(wo*2+1); // mache rechts etwas... System.out.println(baum[wo]); // mache etwas mit dem aktuellen Knoten } } public static int anzahl_elmente(int wo) { if (baum[wo] != -1) // es gibt den Knoten { return( anzahl_elmente(wo*2) + 1 + anzahl_elmente(wo*2+1)); } else return(0); } public static int summe(int wo) { if (baum[wo] != -1) // es gibt den Knoten { return( summe(wo*2) + baum[wo] + summe(wo*2+1)); } else return(0); } public static boolean ist_drin(int wo, int zahl) // wo: aktuelle Index, zahl: zu findende Zahl { if(baum[wo] != -1) // Wenn man auf einem Knoten steht, dann: { if(baum[wo] == zahl) // wenn der Knoten die gesuchte Zahl enthlt return(true); // return TRUE! else if (zahl < baum[wo]) // Knoten grer als Zahl => links weitersuchen return(ist_drin(wo*2, zahl)); else // Knoten kleiner als Zahl => rechts weitersuchen return(ist_drin(wo*2+1, zahl)); } else { return(false); // im "Nichts" ist die Zahl nicht vorhanden... }

} { public static boolean ist_drin_nr(int wo, int zahl) while(true) // Endlos-schleife { if (baum[wo] == -1) return(false); else if (baum[wo] == zahl) return(true); else if (zahl < baum[wo]) wo = 2 * wo; else wo = 2* wo +1; } // NICHT REKURSIV

public static int tiefe(int wo) // wo: aktuelle Index { int links; int rechts; links = 0; rechts = 0; if (baum[wo] != -1) // es gibt den Knoten { links = tiefe(wo*2); // Tiefe im linken Knoten rechts = tiefe(wo*2+1); // Tiefe im rechten Knoten if (links < rechts) return(rechts +1); else return(links +1); } else return(0); } public static int display_HP(int wo, int tiefe) { if(baum[wo] != -1) { display_HP(2*wo, tiefe+1); for(int ii = 0; ii < (tiefe-1)*8; ii++) System.out.print(" "); System.out.print(baum[wo]); System.out.println(" (?," + tiefe + ")"); display_HP(2*wo+1, tiefe+1); } } // kein Knoten => Tiefe = 0!

public static void display_2D(int wo, int tiefe) { if(baum[wo] != -1) { display_2D(2*wo, tiefe+1); for(int ii = 0; ii < (tiefe-1)*8; ii++) System.out.print(" "); System.out.print(baum[wo]); System.out.println(" (?," + tiefe + ")"); display_2D(2*wo+1, tiefe+1); } } public static void main(String[] args) { int groesse = 150; // Mindestens 15 eingeben bei 7 eingefgten Werten, da die Anzahl der Werte mit 2 multipliziert und das Produkt um 1 erhht wird. Binaerbaum baum = new Binaerbaum(groesse); baum.insert(12, 1); // Die Zahl und der Anfangsindexwert muss jedes Mal bergeben werden. baum.insert(6, 1); baum.insert(25, 1); baum.insert(3, 1); baum.insert(7, 1); baum.insert(13, 1); baum.insert(26, 1); baum.insert(2, 1); baum.insert(4, 1); baum.insert(22, 1); baum.insert(1, 1); baum.display_HP(1, 1); baum.display_2D(1, 1); baum.display_flat_hp(1); System.out.println(" Anzahl Elemente : " + anzahl_elmente(1)); System.out.println(" Summe der Elemente: " + summe(1)); System.out.println(" Tiefe des Baums : " + tiefe(1)); if (ist_drin_nr(1,7)) System.out.println(" 7 ist im Baum vorhanden"); else System.out.println(" 7 ist NICHT im Baum vorhanden"); System.out.println("PRE-order:"); preorder(1); System.out.println("IN-order:"); inorder(1); System.out.println("POST-order:"); postorder(1); */ }

/*

Das könnte Ihnen auch gefallen