Einrücken inner der toString()-Methode

Easyik

Mitglied
Hey,

ich bin gerade dabei mir die einzelnen Knoten eines Baumes ausgeben ausgeben zu lassen.
Soweit klappt es ganz gut, jedoch wollte ich gerne etwas mit der Struktur der Ausgabe rumspielen und hätte diesbezüglich fragen 🙃
Gewollt wäre eine Ausgabe nach folgendem Muster :
Code:
[wurzel]--->[linkerKnoten]--->[links.linkerKnoten]......
[                        ]--->[links.rechterKnoten].....
[      ]--->[rechterKnoten]--->[rechts.linkerKnoten].....
[                         ]--->[rechts.rechterKnoten].....

die einzelnen [] gehören untereinander, leider wird dies automatisch nach links verschoben -.-


Java:
public String toStringtest(){
    String result = inhalt;
    if(links==null){
        result=result+"\t Links ist unbekannt---";
    }
    if(links!=null){
        result=result+"\t"+links.toStringtest();
    }

    if(rechts==null){
        result= result+"\n \tRechts ist unbekannt---";
    }

     if(rechts!=null){
        result=result+"\n \t"+rechts.toStringtest();
    }

    return result;
}

solange es bei einem linken und einem rechten Zweig bleibt passt es ja....

bin offen für jede art von Ratschlag
 
Zuletzt bearbeitet von einem Moderator:

fhoffmann

Top Contributor
Ich würde dir eher folgende Ausgabe empfehlen:
Code:
[wurzel]
--->[linkerKnoten]
--->--->[links.linkerKnoten]
--->--->[links.rechterKnoten]
--->[rechterKnoten]
--->--->[rechts.linkerKnoten]
--->--->[rechts.rechterKnoten]
Dazu kannst du deiner Methode toStringtest() einen Parameter mitgeben, also toStringtest(int anzahlEinrueckungen).
 

Easyik

Mitglied
Ich würde dir eher folgende Ausgabe empfehlen:
Code:
[wurzel]
--->[linkerKnoten]
--->--->[links.linkerKnoten]
--->--->[links.rechterKnoten]
--->[rechterKnoten]
--->--->[rechts.linkerKnoten]
--->--->[rechts.rechterKnoten]
Dazu kannst du deiner Methode toStringtest() einen Parameter mitgeben, also toStringtest(int anzahlEinrueckungen).
Schaut auch Interessant aus, allerdings geht es mir jetzt primär dadrum diese erste Idee erstmal umzusetzen.
Danach würde ich mich gerne an deiner empfohlenen Struktur versuchen
 

Easyik

Mitglied
um es nochmal etwas deutlicher zu gestaltet:
Java:
[wurzel]--->[linkerKnoten]--->[links.linkerKnoten]
                          --->[links.rechterKnoten]
        --->[rechterKnoten]--->[rechts.linkerKnoten]
                           --->[rechts.rechterKnoten]
 

fhoffmann

Top Contributor
wäre es möglich die länge eines Baumes zu ermitteln?
Du kannst natürlich die Länge eines Strings ermitteln. Aber wenn alle Kinder, Enkel, Urenkel, Ururenkel des root-Knotens untereinander stehen sollen, musst du zunächst deinen Baum durchgehen und die maximale Länge jeder Generation feststellen. Erst dann kannst du den Baum malen. Das wird - wie gesagt - ziemlich kompliziert.
Deshalb mein Tip, jedem Knoten eine eigene Zeile zu gönnen.
 

Easyik

Mitglied
Ich würde dir eher folgende Ausgabe empfehlen:
Code:
[wurzel]
--->[linkerKnoten]
--->--->[links.linkerKnoten]
--->--->[links.rechterKnoten]
--->[rechterKnoten]
--->--->[rechts.linkerKnoten]
--->--->[rechts.rechterKnoten]
Dazu kannst du deiner Methode toStringtest() einen Parameter mitgeben, also toStringtest(int anzahlEinrueckungen).
wie kriege ich das hin das beim hochzählen einer Variable, das einrücken um eins erhöht wird?
 

fhoffmann

Top Contributor
wie kriege ich das hin das beim hochzählen einer Variable, das einrücken um eins erhöht wird?
Du rufst die Methode für den root-Knoten mit toStringtest(0) auf und rufst dann innerhalb der Methode toStringtest(anzahlEinrueckungen + 1) auf.
Und innerhalb der Methode schreibst du (in einer for-Schleife) soviele Tabulatoren wie benötigt.
 

Easyik

Mitglied
So das wäre der aktuelle Code:

Java:
public String einruecken(int anzahleinzurückendeStellen){
    String einrueckungen="";
    for(int i=0;i<=anzahleinzurückendeStellen;i++){
        einrueckungen=einrueckungen+"\t";
    }
    return einrueckungen;
}


public String toStringtest(){
    String result = inhalt;
   
    int n=0;
    if(links==null){
       
        result=result+"\t"+"links ist unbekannt";
    }
    if(links!=null){
        result=result+"\t"+links.toStringtest();
     
    }

    if(rechts==null){
       
        result=result+"\n"+einruecken(n)+"rechts ist unbekannt";
    }
   
   
    return result;
}

Ich bräuchte einen Tipp wie ich die Variable n um eins erhöhen könnte, gewünscht wäre es das beim Aufruf der toStringtest-Methode keine Eingabe erfolgen muss.

Eine weitere Frage wäre, ob nach dem Selbstaufruf der Methode toStringtest(), erstmal an dieser stelle der Code abgebrochen wird oder davor nochmal ganz durchlaufen wird.... ich hoffe ich konnte es richtig ausdrücken.

Und wie immer gilt bin für jeden Ratschlag offen und dankbar 🙃
 
Zuletzt bearbeitet:
K

kneitzel

Gast
Was @fhoffmann vorgeschlagen hat, ist ja:
Das n wird als Parameter übergeben. Es ist also keine lokale Variable wie bei Dir.

Das bedeutet dann also für Dich und Deine Ausgabe:
a) Deine Methode public String toStringtest() macht nichts anderes, als die toStringtest Methode mit Parameter aufzurufen, also sowas:
Java:
public String toStringtest() {
    return toStringtest(0); // Hier noch evtl. die "magic number" in eine Konstante verbannen!
}

b) In der Methode kannst Du dann bei allen rekursiven Aufrufen statt n ein n+1 mitgeben. Aus dem Code: links.toStringtest(); wird dann links.toStringtest(n+1);

Ansonsten habe ich mir jetzt im Detail Deine einrücken-Methode nicht angesehen und so. Aber du musst den Code bei links vermutlich mit dem einrücken machen - also ähnlich, wie Du es bei rechts schon hast wobei da der rekursive Aufruf fehlt.

Ansonsten noch ein Hinweis zur Vereinfachung des Codes:
Java:
if (a) {
    // ....
}

if (!a) {
    // ...
}

solltest Du einfach schreiben als:
Java:
if (a) {
    // ...
} else {
    // ...
}

Der else Zweig ist ja genau das !a Pendant. Eine neue Prüfung ist da ja nicht notwendig.
 

Easyik

Mitglied
Erstmal vielen dank für die ganze Hilfe.

Soweit scheint es jetzt zu klappen, wobei ich der ersten Struktur sehr nahe gekommen bin.
 
Zuletzt bearbeitet:
K

kneitzel

Gast
Der Code von links und rechts sollte vom prinzip gleich sein, da ja bei beidem eigentlich das gleiche gemacht wird (bis auf eben links durch rechts ersetzt).

Da ist es aber unterschiedlich. Du kannst also schauen, was an der Ausgabe richtig bzw. falsch ist um dann den Code entsprechend anzupassen.
 

Easyik

Mitglied
dadurch wird bei mit gerade ein anderer Fehler deutlich.
Allem Anschein nach befülle ich nur den ganz rechten bzw den ganz linken Zweig mit Informationen.

hätte da jemand auch einen Tipp für mich?

Java:
public void insert(String eingabe,int status){
    if(links==null ){
        links=new Knoten(eingabe,status);
    } else if(links!=null){
        links.insert(eingabe,status);
    }

    if(rechts==null){
        rechts=new Knoten(eingabe,status);
    }else if( rechts!=null){
        rechts.insert(eingabe,status);
    }
}

bin für Ratschläge und Tipps offen.
Danke schon mal im Voraus.
 
K

kneitzel

Gast
Da fehlt die Logik, wo etwas eingefügt werden soll.

Daher ist es beim insert so, dass Du etwas mindestens doppelt einfügst. links und rechts null: Erst wird ein neuer Knoten Links eingefügt, dann auch noch rechts.

Eine Logik kann z.B. eine Sortierung sein:
Du vergleichst eingabe mit dem Wert des aktuellen Knotens. Davon abhängig entscheidest Du ob es links oder rechts eingefügt werden soll. Das geht dann in Richtung Binary Search Tree.
 

Easyik

Mitglied
Da fehlt die Logik, wo etwas eingefügt werden soll.

Daher ist es beim insert so, dass Du etwas mindestens doppelt einfügst. links und rechts null: Erst wird ein neuer Knoten Links eingefügt, dann auch noch rechts.

Eine Logik kann z.B. eine Sortierung sein:
Du vergleichst eingabe mit dem Wert des aktuellen Knotens. Davon abhängig entscheidest Du ob es links oder rechts eingefügt werden soll. Das geht dann in Richtung Binary Search Tree.
ist dies auch umsetzbar wenn man keine zahlen verwenden will
 
K

kneitzel

Gast
ist dies auch umsetzbar wenn man keine zahlen verwenden will
Das ist generell möglich, so man Elemente vergleichen kann.

Das, was hier ins Spiel kommt, ist das Comparable Interface, dass eine compareTo Methode vorsieht.

Dies findet man dann z.B. auch in String, der eben Comparable<String> implementiert:

Damit kann man dann zwei gespeicherte Werte vergleichen und bekommt auch dieses "größer" / "kleiner" bei den Elementen.

Das nennt sich dann auch "natürliche Ordnung" (natural Order).

Generell kann man aber auch eine beliebige Sortierung vornehmen. Da dies aber dann nicht die natürliche Ordnung ist, gehört es nicht mehr zu der Klasse selbst. Die Klasse implementiert also kein Interface dafür. Es ist etwas, das von außen angegeben und bestimmt wird:
Die Anordnung von Gegenständen auf deinem Schreibtisch wären ein Beispiel:
- Natürliche Ordnung gibt es nicht - kann man sich mein Schreibtisch ansehen: Alles liegt so, wie ich oder meine Katze es hinterlassen haben.
- Wenn man jetzt Ordnungsfanatiker hat, dann sortieren die: Einer sortiert alles nach Farbe. Der Farbverlauf muss ein ganz bestimmter sein. Ein anderer will alles nach Größe sortiert haben.... wieder ein Anderer hat ganz andere Ideen. Von mir aus Links alles, was gut desinfiziert ist und alles, was irgendwie berührt wurde muss rechts sein - bereit zum nächsten Desinfizieren.... Das ist also nichts, das durch die Gegenstände bestimmt wird sondern von außen.

Somit ist klar, dass es eine eigenständige Klasse zur Sortierung wird. Und damit die Benutzung klar ist, gibt es ein klares Interface: Comparator<T>.

Das wäre die zweite Möglichkeit. Bei der muss dann aber von Außen ein Comparator mitgegeben werden.

Somit hätte man bei Generics zwei Pattern:

Java:
public class WhatEver<T extends Comparable<T>> {
    public WhatEver() {
        // ...
    }
}


public class WhatEver<T> {
    public WhatEver(Comparator<T> comparator) {
        // ...
    }
}

Das erste WhatEver zeigt: Es können nur Elemente genutzt werden, die eine natürliche Ordnung haben.
Das zweite WhatEver zeigt: Es können beliebige Elemente genutzt werden, es muss keine natürliche Ordnung geben. Aber dafür muss ich bei der Erstellung ein Comparator mitgeben.

Das wäre die etwas längere Erläuterung. Ich hoffe, ich konnte damit mehr erklären als Fragezeichen zu hinterlassen :)
 

Easyik

Mitglied
Das ist generell möglich, so man Elemente vergleichen kann.

Das, was hier ins Spiel kommt, ist das Comparable Interface, dass eine compareTo Methode vorsieht.

Dies findet man dann z.B. auch in String, der eben Comparable<String> implementiert:

Damit kann man dann zwei gespeicherte Werte vergleichen und bekommt auch dieses "größer" / "kleiner" bei den Elementen.

Das nennt sich dann auch "natürliche Ordnung" (natural Order).

Generell kann man aber auch eine beliebige Sortierung vornehmen. Da dies aber dann nicht die natürliche Ordnung ist, gehört es nicht mehr zu der Klasse selbst. Die Klasse implementiert also kein Interface dafür. Es ist etwas, das von außen angegeben und bestimmt wird:
Die Anordnung von Gegenständen auf deinem Schreibtisch wären ein Beispiel:
- Natürliche Ordnung gibt es nicht - kann man sich mein Schreibtisch ansehen: Alles liegt so, wie ich oder meine Katze es hinterlassen haben.
- Wenn man jetzt Ordnungsfanatiker hat, dann sortieren die: Einer sortiert alles nach Farbe. Der Farbverlauf muss ein ganz bestimmter sein. Ein anderer will alles nach Größe sortiert haben.... wieder ein Anderer hat ganz andere Ideen. Von mir aus Links alles, was gut desinfiziert ist und alles, was irgendwie berührt wurde muss rechts sein - bereit zum nächsten Desinfizieren.... Das ist also nichts, das durch die Gegenstände bestimmt wird sondern von außen.

Somit ist klar, dass es eine eigenständige Klasse zur Sortierung wird. Und damit die Benutzung klar ist, gibt es ein klares Interface: Comparator<T>.

Das wäre die zweite Möglichkeit. Bei der muss dann aber von Außen ein Comparator mitgegeben werden.

Somit hätte man bei Generics zwei Pattern:

Java:
public class WhatEver<T extends Comparable<T>> {
    public WhatEver() {
        // ...
    }
}


public class WhatEver<T> {
    public WhatEver(Comparator<T> comparator) {
        // ...
    }
}

Das erste WhatEver zeigt: Es können nur Elemente genutzt werden, die eine natürliche Ordnung haben.
Das zweite WhatEver zeigt: Es können beliebige Elemente genutzt werden, es muss keine natürliche Ordnung geben. Aber dafür muss ich bei der Erstellung ein Comparator mitgeben.

Das wäre die etwas längere Erläuterung. Ich hoffe, ich konnte damit mehr erklären als Fragezeichen zu hinterlassen :)
Gerade überwiegen die Fragezeichen, jedoch weiß ich jetzt wo ich muss noch einlesen muss.
Danke sehr.
 
K

kneitzel

Gast
Gerade überwiegen die Fragezeichen, jedoch weiß ich jetzt wo ich muss noch einlesen muss.
Danke sehr.
Und nicht vergessen: Du kannst auch hier weiter fragen - niemand ist böse, wenn etwas nicht verstanden wird und Erklärungen, die so auf die Schnelle hin geschrieben werden, sind oft nicht optimal. (Ist ein bekanntes Manko - da müsste ich ggf. noch mehr an mir arbeiten. Da müsste ich mir ein Beispiel an @fhoffmann und @httpdigest die hier lieber weniger und dafür hoch exakt schreiben - wie es z.B. auf Stack Overflow auch üblich und notwendig ist! Aber mein innerer Schweinhund lässt mich da schlicht einfach zu faul für sein.) Daher: Auch ein Nachhaken ist herzlich willkommen!
 

Easyik

Mitglied
Und nicht vergessen: Du kannst auch hier weiter fragen - niemand ist böse, wenn etwas nicht verstanden wird und Erklärungen, die so auf die Schnelle hin geschrieben werden, sind oft nicht optimal. (Ist ein bekanntes Manko - da müsste ich ggf. noch mehr an mir arbeiten. Da müsste ich mir ein Beispiel an @fhoffmann und @httpdigest die hier lieber weniger und dafür hoch exakt schreiben - wie es z.B. auf Stack Overflow auch üblich und notwendig ist! Aber mein innerer Schweinhund lässt mich da schlicht einfach zu faul für sein.) Daher: Auch ein Nachhaken ist herzlich willkommen!
Also mich Persönlich haben alle Tipps, Ratschläge und Erklärungen weitergebracht.
daher nochmal an alle vielen dank
 

Easyik

Mitglied
Gäbe es eine bekannte Möglichkeit den Baum nach folgendem Muster zu befüllen?

Java:
                    [0]
            [1]                [2]
            
        [3]    [4]                [5]    [6]
        
    [7]    [8]    [9]    [10] usw.
 
K

kneitzel

Gast
Natürlich gibt es da entsprechende Möglichkeiten. Hast Du Dir denn da schon einmal irgendwelche Gedanken gemacht? Siehst Du irgendwelche Kriterien?

Ansonsten schau einfach einmal, ob Dir mathematische Regeln einfallen.

Ein paar Anregungen, die Dir evtl. weiter helfen können:
Wenn Du die Darstellung oben siehst: Das erinnert doch erst einmal direkt an ein Array mit den Elementen [0], [1], [2], ...
Kannst Du da irgendwelche Regeln aufstellen? Also wie kommst Du von einem Element zu dem Vorgänger? Das wäre also: Eine Formel f(x) die für die jeweiligen x dann folgendes ergibt:
1 -> 0
2 -> 0
3 -> 1
4 -> 1
5 -> 2
6 -> 2
7 -> 3
8 -> 3
9 -> 4
10 -> 4
...

Wenn Du das hättest, dann wirst Du es auch umdrehen können um sozusagen die Nachfolger zu bekommen:
0 -> 1, 2
1 -> 3, 4
2 -> 5, 6
3 -> 7, 8
...
Das ist aber nur um das zu verstehen.

Man könnte das f(x) noch so erweitern, dass da zusätzlich noch links bzw. rechts mit ausgeben wird:
1 -> 0 links
2 -> 0 rechts
3 -> 1 links
4 -> 1 rechts
5 -> 2 links
6 -> 2 rechts
7 -> 3 links
8 -> 3 rechts
9 -> 4 links
10 -> 4 rechts
...

Wenn Du das weisst, dann kannst Du die Kette durchgehen: Wenn Du das Element 10 einfügst, dann ist es an der 4 rechts welches an der 1 rechts welches an der 0 links ist. Also kannst Du links gehen, dann rechts um es da dann rechts einzufügen. Das kann man dann abbilden - sieht auf den ersten Blick so aus, als würde da eine Rekursion in Frage kommen.
 

Easyik

Mitglied
Natürlich gibt es da entsprechende Möglichkeiten. Hast Du Dir denn da schon einmal irgendwelche Gedanken gemacht? Siehst Du irgendwelche Kriterien?

Ansonsten schau einfach einmal, ob Dir mathematische Regeln einfallen.

Ein paar Anregungen, die Dir evtl. weiter helfen können:
Wenn Du die Darstellung oben siehst: Das erinnert doch erst einmal direkt an ein Array mit den Elementen [0], [1], [2], ...
Kannst Du da irgendwelche Regeln aufstellen? Also wie kommst Du von einem Element zu dem Vorgänger? Das wäre also: Eine Formel f(x) die für die jeweiligen x dann folgendes ergibt:
1 -> 0
2 -> 0
3 -> 1
4 -> 1
5 -> 2
6 -> 2
7 -> 3
8 -> 3
9 -> 4
10 -> 4
...

Wenn Du das hättest, dann wirst Du es auch umdrehen können um sozusagen die Nachfolger zu bekommen:
0 -> 1, 2
1 -> 3, 4
2 -> 5, 6
3 -> 7, 8
...
Das ist aber nur um das zu verstehen.

Man könnte das f(x) noch so erweitern, dass da zusätzlich noch links bzw. rechts mit ausgeben wird:
1 -> 0 links
2 -> 0 rechts
3 -> 1 links
4 -> 1 rechts
5 -> 2 links
6 -> 2 rechts
7 -> 3 links
8 -> 3 rechts
9 -> 4 links
10 -> 4 rechts
...

Wenn Du das weisst, dann kannst Du die Kette durchgehen: Wenn Du das Element 10 einfügst, dann ist es an der 4 rechts welches an der 1 rechts welches an der 0 links ist. Also kannst Du links gehen, dann rechts um es da dann rechts einzufügen. Das kann man dann abbilden - sieht auf den ersten Blick so aus, als würde da eine Rekursion in Frage kommen.
ich hätte an gerade und ungerade gedacht.
Startwert bei 0 und falls die folgende zahl ungerade ist nach links andernfalls nach rechts.
Java:
if(wert%2==0){
    links=new Node(wert);
}else{
    rechts=new Node(wert);
}

wie könnte ich den jeden einzelnen Knoten der Breite nach ansprechen ?
 
K

kneitzel

Gast
Ich löse hier jetzt einfach einmal ein bisschen auf, damit Du weiter kommst. Du hast erst einmal richtig festgestellt: Das rechts / links ist schon soweit richtig, wenn es um links/rechts geht. Das wird nachher noch wichtig.

Dann sieht das alles doch ungefähr nach dem Doppelten an:
3 -> 1
5 -> 2
7 -> 3

(Ist halt eine Integer Division - das 0,5 interessiert da nicht.)

Bei den geraden stimmt das aber leider nicht:
4 -> 1 soll es sein aber / 2 wäre 2
6 -> 2 soll es sein aber / 2 wäre 3

Aber oben hatten wir 0,5 zu viel beim Ergebnis und jetzt 1 zu viel - dann lass und einfach einmal erst eins abziehen und dann durch 2 Teilen. Dann wird sich bei den ungeraden nichts ändern und man hat bei den Geraden halt 1 weniger (0,5 abziehen geht ja nicht wirklich):

f(x) = (x-1) / 2

1 -> 0
2 -> 1
3 -> 1

Damit haben wir hier eine erste Vorstellung.

Und wir sehen auch schon: Beim links/rechts haben wir gerade / ungerade betrachtet. Da ist also die frage, ob das letzte Bit 0 oder 1 ist.
Also scheinen da die Bits wichtig zu sein. Dazu malen wir uns wieder alles auf. Da wir immer 1 abziehen müssen bei der Formel, könnte man sich überlegen, ob man einfach schon beim aufschreiben ein -1 nimmt. Dann hat man im Knoten ein -1 stehen. Das ist doof. Also rechnen wir einfach einmal +1. Dann stimmt die Rechnung wieder (Dadurch haben wir beim x ein um 2 höheren Wert. Das Ergebnis ist um 1 höher - und genau das +1 haben wir ja gemacht.

Also haben wir ein Baum:
Oben die 1
dann die 2 und 3 (ein / 2 ergibt die 1!)
dann die 4, 5, 6, 7 (ein / 2 ergibt die 2 und 3)
...

Super!

Aber es geht um die Bits. Also schreib die Zahlen im Binären System auf!
1 => 1
2 => 10
3 => 11
4 => 100
...

Mal Dir diesen Baum einmal auf und schau, wie Du von der Wurzel zu einem Punkt gehen kannst:

Also knoten 1111 -> Du bist 3 mal rechts gegangen
Knoten 1000 -> Du bist 2 mal links gegangen
Knoten 1100 -> links, links, rechts

Das sieht doch gut aus. Du nimmst die Bits also von rechts nach links. Immer das 0er bit entscheidet, ob Du rechts oder links gehen willst.
Danach interessiert das nicht mehr, also das letzte Bit wird gestrichen: Das ist bei binären Zahlen ein / 2

Wir hatten aber dann jetzt immer die erste 1 ignoriert. Wenn Du als Wert nur noch eine 1 hast, dann bist Du am Ziel.

Also n (mit werten ab 1!) nimmst Du.
Am Anfang bist Du an der Wurzel
Wenn n = 1, dann bist Du am Ziel. Hier fügst Du ein.
Sonst: was ist n%2? 0: links, 1: rechts und natürlich wird n = n / 2 gerechnet.
Dann geht es weiter bei "Wenn n = 1"...
==> Schleife oder Rekursion - beides geht.
 

Blut1Bart

Bekanntes Mitglied
Ich verstehe einfach nicht, wie sich @Easyik die Ausgabeform vorstellt...

Java:
public class BinTree {
    BinTree l;
    BinTree r;
    Object content;

    public String deepToString() {
        BinTree[] a = new BinTree[1000];
        a[0] = this;
        for (int i = 0; i < a.length / 2 - 1; i++) {
            if (a[i] != null) {
                a[2 * i + 1] = a[i].l;
                a[2 * i + 2] = a[i].r;
            }
        }

        StringBuilder b = new StringBuilder();
        b.append(a[0]);
        for (int i = 1; i <= 10; i++) {
            b.append(".".repeat(i * 3));
            for (int j = i; j <= 10; j += i * 2) {
                if (a[j] != null) {
                    b.append(a[j]);
                    b.append(".".repeat(3));
                } else {
                    b.append(".".repeat(4));
                }
            }
            b.append("\n");
        }
        return b.toString();
    }

    @Override
    public String toString() {
        return content.toString();
    }

    public static void main(String[] args) {
        BinTree root = new BinTree();
        root.l = new BinTree();
        root.r = new BinTree();
        root.l.l = new BinTree();
        root.l.r = new BinTree();
        root.l.r.r = new BinTree();
        root.l.l.l = new BinTree();
        root.content = "0";
        root.l.content = "1";
        root.r.content = "2";
        root.l.l.content = "3";
        root.l.r.content = "4";
        root.l.l.l.content = "7";
        root.l.r.r.content = "10";
        System.out.println(root.deepToString());
    }
}

Code:
0...1...3.......7.......
......2.......10...
.........3.......
............4...
...................
......................
.....................7...
............................
...............................
..............................10...

das macht für mich bis jetzt nur bedingt sinn...
 

Easyik

Mitglied
Java:
[root]    links    links.links        links.links.links .....
                                links.links.rechts
                links.rechts    links.rechts.links
                                links.rechts.rechts
und das selbe nochmal für den Rechten zwei

das war gewollt und auch umgesetzt ^^

falls du nach dem Sinn dahinter fragst, da gibt es keinen :) jedenfalls keinen den ich verfolge
 
Zuletzt bearbeitet:

Easyik

Mitglied
oh, na dann ist die Aufgabe ja schon erledigt :)
nur zum teil, währenddessen hat sich ein grober Fehler innerhalb der insert-Methode bemerkbar gemacht. habe jetzt zwar einen guten Ansatz aber für heute reicht es auch langsam.

wenn ich es morgen fertig kriege würde ich auch die Lösung hier reinsetzen, falls dies erlaubt und gewünscht ist
 

Easyik

Mitglied
so nachdem ich mich dran gesetzt habe die Tipps umzusetzen ist bei mir dieser Code entstanden :
Java:
public int korrekturDerReihenfolge(int n){
    if(n%2==0){
        n=n/2;
    }else{
    n=(n-1)/2;
    }
    return n;
}

public void insert(String eingabe,int status){
    int n=status;
    if(links==null&& status%2==0){
        links=new Knoten(eingabe,status);
    }else if(rechts==null && status%2 !=0){
        rechts=new Knoten(eingabe,status);
    }else{

    korrekturDerReihenfolge(n);
    if(n==links.status){
        links.insert(eingabe, status);

    }else if(n==rechts.status){
        rechts.insert(eingabe, status);
    }
}
}

jedoch hat sich da ein Fehler eingeschlichen, und ich komme nicht weiter als zu den ersten Child-Elementen

könnte jemand einen blick darauf werfen und mich auf den Fehler hinweisen ?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Codes einrücken Java Basics - Anfänger-Themen 5
R Erste Schritte Strings "einrücken" Java Basics - Anfänger-Themen 3
C Rhombus erstellen: wie einrücken? Java Basics - Anfänger-Themen 6
S Allgemein: Quellcode einrücken Java Basics - Anfänger-Themen 8
J Ausgabe einrücken? Java Basics - Anfänger-Themen 3
P Befehl zum einrücken der textausgabe? Java Basics - Anfänger-Themen 6
K HTML Code einrücken Java Basics - Anfänger-Themen 5
K Zahlen Einrücken. Java Basics - Anfänger-Themen 2
A Labels Inner JButton Event Erstellbar? Java Basics - Anfänger-Themen 3
Phil42 "Local variable i is accessed from within inner class" Java Basics - Anfänger-Themen 3
C Klassen Minesweeper Problem. int needs to be final (inner class problem) Java Basics - Anfänger-Themen 3
M Netbeans Listener - Anonymous, inner class, main class? Java Basics - Anfänger-Themen 4
N local variable model is accessed from within inner class; needs to be declared final Java Basics - Anfänger-Themen 4
R inner class Java Basics - Anfänger-Themen 15
Y Wann / Wozu inner class Java Basics - Anfänger-Themen 3
T Jar: Zugriff auf Dateien inner- unter außerhalb d. jar-Files Java Basics - Anfänger-Themen 3
K Eventlistener und inner class Variablen Java Basics - Anfänger-Themen 5
H local variable . is accessed from within inner class Java Basics - Anfänger-Themen 10
G Inner class Java Basics - Anfänger-Themen 4
W LocalDate toString und nach Split falsch "erkannt"? Java Basics - Anfänger-Themen 8
W ArrayList und toString Java Basics - Anfänger-Themen 17
W toString bei composition Java Basics - Anfänger-Themen 4
M Unterschied Integer.toString(x) und x.toString() Java Basics - Anfänger-Themen 22
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
M Polymorphie toString Java Basics - Anfänger-Themen 13
Y Wie kann ich ein Element in einer toString finden. Java Basics - Anfänger-Themen 2
A Implementierung von String toString methode() Java Basics - Anfänger-Themen 4
P falscher booleanwert bei toString Java Basics - Anfänger-Themen 4
P Methode die eigentlich einen Scanner benötigt mit toString() Java Basics - Anfänger-Themen 5
M Wie analysiert JSON eine toString-Ausgabe ? Java Basics - Anfänger-Themen 1
J Methoden toString()-Date Formatter Java Basics - Anfänger-Themen 8
V Neue Ausgabe von toString nach Methodenaufruf Java Basics - Anfänger-Themen 9
M Die Inhalte eines Arrays mit der Methode Arrays.toString ausgeben Java Basics - Anfänger-Themen 4
H toString-Methode Java Basics - Anfänger-Themen 24
E Vererbung mit toString() Java Basics - Anfänger-Themen 6
O Referenz - toString Java Basics - Anfänger-Themen 9
B toString mit optionaler Ausgabe überrschreiben Java Basics - Anfänger-Themen 5
J toString-Methode in Verbindung mit varArgs-Konstruktor Java Basics - Anfänger-Themen 18
C Methoden toString Java Basics - Anfänger-Themen 4
B toString() Dilemma Java Basics - Anfänger-Themen 7
TomatenBrot447 Mit toString eine Ausgabe liefern wie in einer schon implementierten Methode ? Java Basics - Anfänger-Themen 13
TomatenBrot447 Mit toString eine Ausgabe liefern wie in einer schon implementierten Methode ? Java Basics - Anfänger-Themen 1
V ToString-Methode mit JUnit testen(BlueJ) Java Basics - Anfänger-Themen 10
D Arrays.toString spuckt null aus? Java Basics - Anfänger-Themen 3
S Methoden equals(object o) / toString Java Basics - Anfänger-Themen 15
K array in toString des objektes ausgeben Java Basics - Anfänger-Themen 1
Psypsy hashCode, equals und toString Java Basics - Anfänger-Themen 3
J toString() Methode und ArrayList Java Basics - Anfänger-Themen 1
K toString() Java Basics - Anfänger-Themen 1
H Erste Schritte Arrayes.toString methode funktioniert nicht Java Basics - Anfänger-Themen 2
A Problem mit toString Methode Java Basics - Anfänger-Themen 8
T String toString methode nicht vererbt ... Java Basics - Anfänger-Themen 4
I Vererbung toString() Frage Java Basics - Anfänger-Themen 5
M Unbekannte Nummer bei Aufruf der toString Methode Java Basics - Anfänger-Themen 3
E Richtige Ausgabe nur mit toString() - Warum? Java Basics - Anfänger-Themen 4
S Datentypen List.toString wirft NullPointerException Java Basics - Anfänger-Themen 5
A ToString()-Methode richtig benutzen Java Basics - Anfänger-Themen 3
J ArrayList toString() Übergabe Fehler Java Basics - Anfänger-Themen 2
F Eigene LinkedList - toString Java Basics - Anfänger-Themen 10
A JList / toString modify Java Basics - Anfänger-Themen 2
J Vererbung Überschriebene toString-Methode aufrufen Java Basics - Anfänger-Themen 10
M toString gibt "null" statt "0.0" aus Java Basics - Anfänger-Themen 5
M toString Java Basics - Anfänger-Themen 7
H Integer.toString(int i) vs. String.valueOf(int i) Java Basics - Anfänger-Themen 12
C Methoden String von einem toString() herauslesen Java Basics - Anfänger-Themen 2
B Wann toString() überschreiben? Java Basics - Anfänger-Themen 21
P toString-Methode gibt immer null vor Variable aus Java Basics - Anfänger-Themen 9
N .toString() und (string) Java Basics - Anfänger-Themen 2
B Methoden toString Methode mit Schlüsselwort new Java Basics - Anfänger-Themen 3
S schwierigkeit mit in der verwaltungsklasse benutzen von toString() Java Basics - Anfänger-Themen 7
J Zweidimensionales Array durch ToString ausgeben lassen Java Basics - Anfänger-Themen 21
N Matrix an toString Java Basics - Anfänger-Themen 7
A Werteausgabe des Construktors mit toString Java Basics - Anfänger-Themen 2
D super.tostring Java Basics - Anfänger-Themen 8
A Stringarray toString Java Basics - Anfänger-Themen 5
L toString()-Methode in verschieden Klassen Java Basics - Anfänger-Themen 3
R Frage zu statischer Methode toString() Java Basics - Anfänger-Themen 3
S Escape Sequenz in der toString() ? Java Basics - Anfänger-Themen 4
S Stack als verkettete liste/ toString methode Java Basics - Anfänger-Themen 3
A Arrays.asList(s).toString() ohne [] und , Java Basics - Anfänger-Themen 3
P toString Java Basics - Anfänger-Themen 4
M .toString(); // Ausgabe: Attribut von Vaterklasse Java Basics - Anfänger-Themen 12
K toString Java Basics - Anfänger-Themen 10
F toString Methode ausgeben Java Basics - Anfänger-Themen 3
A Object -> String mit valueOf, toString oder cast ? Java Basics - Anfänger-Themen 6
R getClass und getName sowie toString Java Basics - Anfänger-Themen 10
D Arrays.toString problem Java Basics - Anfänger-Themen 2
D array.toString() wieso funktioniert es nicht Java Basics - Anfänger-Themen 4
S toString-Methode für Map Java Basics - Anfänger-Themen 15
L OOP hilfe bei tostring methode Java Basics - Anfänger-Themen 6
D toString überschreiben + Exception werfen Java Basics - Anfänger-Themen 3
H toString / println Java Basics - Anfänger-Themen 2
H toString() erben? Java Basics - Anfänger-Themen 3
A Arrays.toString() ohne [ und ] Java Basics - Anfänger-Themen 2
K Arrays.toString(); funktioniert nicht Java Basics - Anfänger-Themen 4
A byte.toString() -> Datenmüll Java Basics - Anfänger-Themen 52
K Problem mit .toString und FileReader Java Basics - Anfänger-Themen 2
G toString Problem Java Basics - Anfänger-Themen 12
G Gregorian Calendar aus toString() Ausgabe wiederherstellen Java Basics - Anfänger-Themen 4
T Warum Fehlermeldung bei diesem ToString Programm? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben