|
|
Java Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
class BinBaum // ------------------------------------------------ { BinBaum links; // linker Teilbaum BinBaum rechts; // rechter Teilbaum String inhalt; // Inhalt soll String sein. // Konstruktor BinBaum (String neu) { this.links = null; this.rechts = null; this.inhalt = neu; } void fuegeEinSortiert (String neu) { if (inhalt == neu) { // in linken Teilbaum einfuegen if (links == null) links = new BinBaum(inhalt); else links.fuegeEinSortiert(inhalt); } else { // in rechten Teilbaum einfuegen if (rechts == null) rechts = new BinBaum(inhalt); else rechts.fuegeEinSortiert(inhalt); } } // fuegeEinSortiert void ausgabeLWR() {}; void ausgabeRWL() {}; int anzahl() {return 6;} void ausgabe () { if (links != null) links.ausgabe(); System.out.print(inhalt); System.out.println(); if (rechts != null) rechts.ausgabe(); } // laufeDurch } // class BinBaum |
|
|
Java Quellcode |
1 |
class BinBaum // ------------------------------------------------ { BinBaum links; // linker Teilbaum BinBaum rechts; // rechter Teilbaum String inhalt; // Inhalt soll String sein. // Konstruktor BinBaum (String neu) { this.links = null; this.rechts = null; this.inhalt = neu; } void fuegeEinSortiert (String neu) { if (inhalt == neu) { // in linken Teilbaum einfuegen if (links == null) links = new BinBaum(inhalt); else links.fuegeEinSortiert(inhalt); } else { // in rechten Teilbaum einfuegen if (rechts == null) rechts = new BinBaum(inhalt); else rechts.fuegeEinSortiert(inhalt); } } // fuegeEinSortiert void ausgabeLWR() {}; void ausgabeRWL() {}; int anzahl() {return 6;} void ausgabe () { if (links != null) links.ausgabe(); System.out.print(inhalt); System.out.println(); if (rechts != null) rechts.ausgabe(); } // laufeDurch } // class BinBaum |
Kann uns da mal jemand bitte weiterhelfen?
Quoted
Schauen Sie doch einmal unter Wikipedia und binärem Suchbaum:
<img src="https://studip.hs-wismar.de/assets/images/link_extern.gif" border="0" />[url]http://de.wikipedia.org/wiki/Bin%C3%A4rer_Suchbaum[/url]
Dort wird die Rotation erklärt.
Bei einer Rotation nach rechts passiert folgendes:
<code>
A B
+---+---+ Rotation rechts: +---+---+
B baum3 ==================> baum1 A
+---+---+ +---+---+
baum1 baum2 baum2 baum3
</code>
- Der linke Nachfolger der Wurzel wird zum neuen Wurzelknoten
- Die alte Wurzel(A) wird zum rechten Nachfolger der neuen Wurzel(B)
- Der alte rechte Unterbaum (b3) der Wurzel(A) bleibt rechter Unterbaum von A
- Der alte linke Unterbaum (b1) von B bleibt linker Unterbaum von B
- Der alte rechte Unterbaum(b2) von B wird linker Unterbaum von A
|
|
Java Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
/** * Ein binärer Suchbaum für Zeichenketten. * * Generell können beliebige Objekte in einem Baum verwaltet werden. * Ein binärer Suchbaum kann nur Objekte verwalten, die vergleichbar * sind, d.h. auf denen eine Ordnung existiert. * Programmtechnisch müssen diese Objekte das Interface Comparable * implementieren. * * @author Uwe Lämmel * @version 04.12.2007 */ public class StringTree { //-- Bauplan ---------------------------------------------------- String obj; // Inhalt des Knoten StringTree left; // linker Teilbaum StringTree right; // rechter Teilbaum //-- Konstruktor new -------------------------------------------- public StringTree(String x,StringTree l,StringTree r) { obj=x; left=l; right=r; } public StringTree(String x) { obj=x; left= right=null;} public StringTree() { obj=null; left= right=null;} //-- getLeft,getRight, getRoot ---------------------------------- public StringTree getLeft () { return left; } public StringTree getRight () { return right; } public String getObject () { return obj; } //-- setLeft, setRight, setRoot --------------------------------- public void setLeft (StringTree l) { left =l; } public void setRight (StringTree r) { right=r; } public void setObject(String x) { obj =x; } //-- Einfügen eines neuen Elementes public void insert(String x){ // Vergleich ob in den linken oder rechten Unterbaum if(getObject().compareTo(x)>0){ // Wenn Unterbaum leer, dann neues Element einfügen if(getLeft()==null) { // Erzeugen eines neuen Knotens mit x als Inhalt StringTree st = new StringTree(x); setLeft(st); }/if // Sonst rekursives Einfügen im Unterbaum: else getLeft().insert(x); } else{ // wie links, siehe oben if(getRight()==null){ // Erzeugen eines neuen Knotens mit x als Inhalt StringTree st = new StringTree(x); setRight(st); }//if else getRight().insert(x); } }//insert //-- Ausgabe des Baumes in sortierter Reihenfolge //-- aufsteigend: Links-Wurzel-Rechts public String ausgabeLWR(){ String s=""; if(getLeft()!=null) s += getLeft().ausgabeLWR(); s += " "+getObject(); if(getRight()!=null) s += getRight().ausgabeLWR(); return s; }//LWR //-- ShowBranches ----------------------------------------------- //-- Hilfsmethode zur formatierten Ausgabe auf der Konsole private void showBranches(int level) { IntIO io = new IntIO(); if (getRight()!=null) getRight().showBranches(level+1); for(int i=0; i<level;i++) io.write(" "); io.writeln("+-> "+getObject()); if (getLeft()!=null) getLeft().showBranches(level+1); }//showBranches //-- ausgabe ---------------------------------------------------- public void ausgabe() { this.showBranches(0); } }//StringTree |