Prof. Dr. R. Laue                                                                                                                                  SS00
                                Informatik II
                                Übungsblatt 6







Lösung Aufgabe 12 (8 Programmierpunkte - Abgabe per email)

rot_rechts(struct knoten **wurzel)
        {
        struct knoten * hilf;

        if (*wurzel == NULL) return 0;
        hilf = *wurzel;
        *wurzel = (*wurzel)->links;
        hilf->links = (*wurzel)->rechts;
        (*wurzel)->rechts = hilf;
        return 0;
        }

rot_links(struct knoten **wurzel)
        {
        struct knoten * hilf;

        if (*wurzel == NULL) return 0;
        hilf = *wurzel;
        *wurzel = (*wurzel)->rechts;
        hilf->rechts = (*wurzel)->links;
        (*wurzel)->links = hilf;
        return 0;
        }
 

doppel_rot_linksrechts(struct knoten **wurzel)
        {
        struct knoten * hilf;
        if (*wurzel == NULL) return 0;
        if ( (*wurzel)->links == NULL) return 0;
/*
        rot_links( & ((*wurzel)->links));
        return rot_rechts(wurzel);
*/
        hilf = (*wurzel)->links->rechts;
        (*wurzel)->links->rechts = hilf->links;
        hilf->links = (*wurzel)->links;
        (*wurzel)->links = hilf->rechts;
        hilf->rechts = (*wurzel);
        *wurzel = hilf;
        }

doppel_rot_rechtslinks(struct knoten **wurzel)
        {
        struct knoten * hilf;
        if (*wurzel == NULL) return 0;
        if ( (*wurzel)->rechts == NULL) return 0;
/*
        rot_rechts( & ((*wurzel)->rechts));
        return rot_links(wurzel);
*/
        hilf = (*wurzel)->rechts->links;
        (*wurzel)->rechts->links = hilf->rechts;
        hilf->rechts = (*wurzel)->rechts;
        (*wurzel)->rechts = hilf->links;
        hilf->links = (*wurzel);
        *wurzel = hilf;
        }