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;
}