B-Tree auf Konsole anschaulich machen?

boehmi

New member
Hallo,

wir haben gerade Trees an der Uni und haben als Aufgabe bekommen ein Programm zu schreiben, welches beliebige Strings in einen B-Tree (bzw. 2-3 Tree) einfügt.

Anschließend sollen wir den Baum "in a suitable form" auf der Konsole ausgeben ;)

Im Moment gebe ich einfach Rekursiv die Elemente von Oben nach Unten aus... aber besonders anschaulich ist das nicht... vor allem wenn man die Source nicht kennt.

Kann mir da jemand einen Tipp bzw. Pseudocode geben?

Google hat leider nix gefördert

Danke
 

Garfield

New member
vielleicht sowas?

Code:
..left
.root
...rightleft
..right
...rightright
(Hoffe, dass das halbwegs anschaulich ist :))
 

jemo.

Member
Ich würde vorschlagen auch etwas baumartiges zur Präsentation zu nehmen. Mit Bodenstrichen und vertikalen Strichen könntest du die Kanten darstellen und wenn vorher die Tiefe berechnet wurde auch einen Maßstab nehmen. Damit lässt sich jeder Baum übersichtlich darstellen, ist allerdings in der Konsole aufwendig denke ich.
Ich habe sowas nur für die Schule mal auf einer Canvas gemacht.

Kann dir bei Bedarf den Code zukommen lassen, ist allerdings Delphi.
 

t3rr0r.bYt3

New member
Im simpelsten Fall die Elemente zeilenweise ausgeben und die Länge der Einrückung / eines Prefixes von der Tiefe des Knotens abhängig machen.
/edit: Vertikalen Verbindungslinien haben afaik keinen Sinn, da die Darstellung dann stark von der Schriftart abhängt (Monospace oder nicht).
 

boehmi

New member
Jap ich hab den Tree jetzt seitlich geprintet:

Code:
int einrueck = 0;

void gap()
{
    int i;
    for (i = 0; i < indent; i++) printf(" ");
}

void print_tree_internal(struct node * root)
{
    if (root != NULL)
    {
        einrueck+=6;
        gap(); printf("[\n");
        print_tree_internal(root->right);
        if (root->value2)
        {
            gap(); printf("%s\n", root->value2);
        }
        print_tree_internal(root->mid);
        gap(); printf("%s\n", root->value1);
        print_tree_internal(root->left);
        gap(); printf("]\n");
        einrueck-=6;

    }
}

void printTree(struct node * root)
{
     einrueck = 0;
     print_tree_internal(root);
}
 
Oben