30,7 → 30,6 |
#include "mavl.h" |
|
extern void the_print(); |
//void the_print(){}; |
|
static void |
mavl_drot2(struct mavlnode *n, struct mavlnode **parent, int dir) |
37,9 → 36,7 |
{ |
|
mavl_rot(n->s[dir],&n->s[dir],1-dir); |
//the_print(); |
mavl_rot(n,parent,dir); |
//the_print(); |
return; |
} |
|
69,6 → 66,7 |
} |
|
if (n->s[dir]->bal == -sdir) { |
//printf("DROT_START\n"); |
//the_print(); |
// n->bal = 0; |
// n->bal = n->s[dir]->bal; //-sdir; |
85,14 → 83,48 |
|
// n->s[dir]->bal = 999; |
// |
b = n->s[dir]->s[1-dir]->bal; |
|
|
{ |
int l,r; |
l = n->s[0] ? 1 : 0; |
r = n->s[1] ? 1 : 0; |
l = n->s[0] ? n->s[0]->bal : 0; |
r = n->s[1] ? n->s[1]->bal : 0; |
n->bal = r+l; |
|
if (!n->s[dir]->s[dir]) n->bal = 0; |
|
//printf("NBAL: %d (%d, %d)\n",n->bal,l,r); |
|
} |
|
|
b = n->s[dir]->s[1-dir]->bal; |
//printf("B: %d sdir: %d\n",b,sdir); |
if (b==0) { |
n->bal = -sdir; |
} |
else if (b==-sdir) { |
//printf("b = sdir = 0\n"); |
n->bal=0; |
} else { |
//printf("Kick\n"); |
// exit(0); |
} |
//printf("BALBAL: %d\n",n->bal); |
|
b = n->s[dir]->s[1-dir]->bal; |
|
if (b == 0){ |
n->s[dir]->bal = 0; |
n->bal=0; |
} else if (b == sdir) { |
n->bal = -sdir; |
n->s[dir]->bal = 0 ; |
} else if (b == -sdir){ |
n->s[dir]->bal = sdir; |
n->bal=0; |
} else{ |
printf("Kack\n"); |
exit(0); |
101,14 → 133,8 |
|
n->s[dir]->s[1-dir]->bal = 0; // ok z |
|
|
mavl_drot2(n, parent,dir); |
|
{ |
int l,r; |
l = n->s[0] ? 1 : 0; |
r = n->s[1] ? 1 : 0; |
n->bal = r-l; |
} |
// n->bal=98; |
return 1; |
|
131,37 → 157,6 |
exit(0); |
} |
|
|
static int |
adj_bala(struct mavlnode *n, struct mavlnode **parent, int dir, int sdir) |
{ |
|
int b; |
if (n->s[dir]->bal == sdir) { |
n->bal = 0; |
n->s[dir]->bal = 0; |
mavl_rot(n, parent,dir); |
return 0; |
} |
|
b = n->s[dir]->s[1-dir]->bal; |
if (b==-sdir){ |
n->bal = 0; |
n->s[dir]->bal = sdir; |
}else if (b==sdir){ |
n->bal = -sdir; |
n->s[dir]->bal = 0; |
}else{ |
n->bal = 0; |
n->s[dir]->bal = 0; |
} |
|
n->s[dir]->s[1-dir]->bal = 0; |
mavl_drot(n, parent,dir); |
return 0; |
|
} |
|
static int |
mavl_del_lo(struct mavl * t, struct mavlnode **parent, void *data) |
{ |