*p=v; v->bal=0; } } /* konec switche */ } /* konec vyvaz1 */ void vyvaz2(uzel **p,int *h) { /* h=1 - pravá větev se zmenšila */ uzel *u,*v; short int b1,b2; switch ((*p)->bal) { case 1: (*p)->bal=0; break; case 0: (*p)->bal=-1; *h=0; break; case -1: /* znovuvyvážení */ u=(*p)->levy; b1=u->bal; if (b1<=0) { /* jednoduchá LL rotace */ printf ("jednoducha LL rotace\n"); (*p)->levy=u->pravy; u->pravy=*p; if (b1==0) {(*p)->bal=-1; u->bal=1; *h=0;} else {(*p)->bal=0; u->bal=0;} (*p)=u; } else { /* dvojitá LR rotace */ printf("dvojita LR rotace\n"); v=u->pravy; b2=v->bal; u->pravy=v->levy; v->levy=u; (*p)->levy=v->pravy; v->pravy=(*p); (*p)->bal=(b2==-1)?1:0; u->bal=(b2==1)?-1:0; *p=v; v->bal=0; } } /* konec switche */ } /* konec vyvaz2 */ void smaz(uzel **r,int *h) { if((*r)->pravy!=NULL) { smaz(&((*r)->pravy),h); if(*h) vyvaz2(r,h); } else {
98 Algoritmy v jazyku C a C++
Ukázka elektronické knihy, UID: KOS209711