avl_delete...

This commit is contained in:
Howard Chu 2005-09-26 08:57:19 +00:00
parent 4c89b0e80c
commit 8c3e9ddb1c
2 changed files with 7 additions and 9 deletions

View File

@ -230,14 +230,13 @@ avl_delete( Avlnode **root, void* data, AVL_CMP fcmp )
/* fix stack positions: old parent of p points to q */
pptr[side] = q;
if ( side ) {
--side;
r = pptr[side];
r->avl_link[pdir[side]] = q;
r = pptr[side-1];
r->avl_link[pdir[side-1]] = q;
} else {
*root = q;
}
/* new parent of p points to p */
if ( depth > 1 ) {
if ( depth-side > 1 ) {
r = pptr[depth-1];
r->avl_link[1] = p;
} else {
@ -246,7 +245,7 @@ avl_delete( Avlnode **root, void* data, AVL_CMP fcmp )
}
/* now <p> has at most one child, get it */
q = p->avl_link[0];
q = p->avl_link[0] ? p->avl_link[0] : p->avl_link[1];
ber_memfree( p );

View File

@ -244,14 +244,13 @@ tavl_delete( Avlnode **root, void* data, AVL_CMP fcmp )
/* fix stack positions: old parent of p points to q */
pptr[side] = q;
if ( side ) {
--side;
r = pptr[side];
r->avl_link[pdir[side]] = q;
r = pptr[side-1];
r->avl_link[pdir[side-1]] = q;
} else {
*root = q;
}
/* new parent of p points to p */
if ( depth > 1 ) {
if ( depth-side > 1 ) {
r = pptr[depth-1];
r->avl_link[1] = p;
} else {