Announcement

Collapse
No announcement yet.

Binär Baum

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Binär Baum

    Hallo,

    Ich habe die Aufgabe einen Binären Suchbaum "grafisch" darzustellen.
    °°°°°°°°°°°°°40°°°°°°°°°°°°°
    °°°°°°°°°°°°°/\°°°°°°°°°°°°°° °- Leerzeichen
    °°°°°°°°°°°°/°°\°°°°°°°°°°°°°
    °°°°°°°°°°°/°°°°\°°°°°°°°°°°°
    °°°°°°°°°°/°°°°°°\°°°°°°°°°°°
    °°°°°°°°°12°°°°°57°°°°°°°°°°
    °°°°°°°°°/\°°°°°°/\°°°°°°°°°°°
    °°°°°°°°/°°\°°°°/°°\°°°°°°°°°°
    °°°°°°°5°°20°°43°°90°°°°°°°°

    Zur zeit tut er aber nur:
    °°°°°°°°°°°°°40°°°°°°°°°°°°°
    °°°°°°°°°°°°°/\°°°°°°°°°°°°°°
    °°°°°°°°°°°°/°°\°°°°°°°°°°°°°
    °°°°°°°°°°°/°°°°\°°°°°°°°°°°°
    °°°°°°°°°°/°°°°°°\°°°°°°°°°°°
    °°°°°°°°°12°°°°°57°°°°°°°°°°
    °°°°°°°°°/°°°°°°°°\°°°°°°°°°°
    °°°°°°°°/°°°°°°°°°°\°°°°°°°°°
    °°°°°°°5°°°°°°°°°°°43°°°°°°°
    °°°°°°/°°°°°°°°°°°°°°\°°°°°°°
    °°°°°20°°°°°°°°°°°°°90°°°°°°

    Hier der Code:

    // Grafik zum Baum
    //in ganzerBaum[] stehen einfach die Werte drin

    void BinBaum:rintTree(node ganzerBaum[]){

    /* Bedingungen: Die Länge der „Äste“ entspricht genau der Zweierpotenz der noch darunterliegenden Ebenen. (Bsp.:2 hoch 3 = Länge 8 zwischen Knoten 40 und Knoten 12). Der Abstand zwischen zwei sog. „gleichgeordneten“ oder Geschwister-Knoten entspricht dem Platzbedarf der BlattElemente darunter. Für jeden Blattknoten werden inkl. Leerraum zum nächsten 4 Zeichen benötigt (bei Zahlen <100). Daher sind es 4 * «max. Anzahl Blätter» abzüglich 2 Zeichen (Bsp.: 14 Zeichen zwischen Knoten 12 und Knoten 45).*/

    int helper = pow(2.0, maxdepth());
    int width = (helper*4)-2;
    int length = 8;
    int space1 = width/2;
    int space2 = 0;
    int array_count = 1;
    int line = 2;

    // Erster wert, root
    //setzt Leerzeichen
    spaces(space1);
    cout << ganzerBaum[0].getValue() << endl;

    // Und die nachfolgenden Werte
    // Zeichne solange Aeste bis lenght = 0
    do{
    // Wiederholde die Astgabelung mehrmals: 1, 2, 4, 8, 16
    // Funktioniert irgendwie nicht
    do{
    // Zeichne die Aeste mit "/" und "\"
    for (int i = 0; i <length; i++){
    spaces(space1);
    cout << "/";
    spaces(space2);
    cout << "\\";
    spaces(space1);
    cout << endl;
    space1 = space1-1;
    space2 = space2+2;
    }
    // Wenn die Aeste lang genug, dann schreibe die Werte hin
    // Da sind jetzt wegen der fehlenden Wiederholung falsche
    // Spruenge drin
    spaces(space1);
    cout << ganzerBaum[array_count].getValue();
    array_count++;
    spaces(space2-1);
    cout << ganzerBaum[array_count].getValue();
    array_count++;
    spaces(space1);
    line--;
    cout << endl;
    } while( line == 1);
    length = length/2;
    space1 = space1-1;
    space2 = space2+2;
    width = width/2;
    line = line*2;

    } while (length != 0);

    }

    Vielleicht könnt ihr mir sagen was mir fehlt zur richtigen Darstellung

  • #2
    Salve,

    solange du das zeichnen nicht genauso rekursiv machst wie
    die baum erstellung oder einen index für jeden knoten vergibts,
    wird es wohl nicht funktionieren.
    Jeder knoten muß die Anzahl der unterknoten enthalten.
    genauso die information ob unterknoten links bzw rechts.
    root ist klar
    tiefsten punkt bestimmen
    Anzahl ebenen bestimmen
    max. anzahl knoten pro ebenen bestimmen
    jetzt kannst du anfangen zu zeichen.
    Wenn du einen index hast, ist es jetzt möglich jeden
    knoten an seinen richtigen punkt zu zeichnen.

    mfg
    Fred

    Comment

    Working...
    X