31,7 → 31,7 |
|
|
|
static int adj_bal_r(struct mavlnode *n, struct mavlnode **parent, int dir) |
static int adj_bal(struct mavlnode *n, struct mavlnode **parent, int dir) |
{ |
|
int sdir = dir ? 1:-1; |
98,6 → 98,8 |
struct mavlnode *n = *parent; |
int rc; |
int bal; |
int dir,sdir; |
|
rc = t->cmp(data, mavlnode_dataptr(n)); |
|
if (rc == 0) { |
119,7 → 121,7 |
return 1; |
} |
|
/* node has two childs */ |
/* node has two children */ |
|
if (t->del) { |
t->del(mavlnode_dataptr(n)); |
133,12 → 135,25 |
if (n->bal != -2) |
return bal; |
|
/* return adj_bal_r(n, parent); */ |
return adj_bal(n, parent,1); |
|
} |
|
dir = rc < 0 ? 0 : 1; |
sdir = dir ? -1:1; |
bal = mavl_del0(t, &n->s[dir], data); |
if (bal == 2) |
return 2; |
n->bal += bal*sdir; |
if (n->bal == sdir) |
return 0; |
|
return 0; |
if (n->bal != 2*sdir) |
return bal; |
|
return adj_bal(n, parent,1-dir); |
|
|
} |
|
|