Browse Source

fix the fix...

release0.1.5
Georg Hopp 12 years ago
parent
commit
b506318d72
  1. 6
      src/tree/delete.c

6
src/tree/delete.c

@ -31,6 +31,7 @@ void *
treeDelete(Tree * this, const void * search, TreeComp comp) treeDelete(Tree * this, const void * search, TreeComp comp)
{ {
Tree node = *this; Tree node = *this;
Tree del_node;
void * data; void * data;
@ -102,8 +103,8 @@ treeDelete(Tree * this, const void * search, TreeComp comp)
delete(node); delete(node);
return data; return data;
} else { } else {
del_node = node;
if (NULL != child) { if (NULL != child) {
delete(node);
node = child; node = child;
} else { } else {
node->color = rbBlack; node->color = rbBlack;
@ -171,13 +172,11 @@ treeDelete(Tree * this, const void * search, TreeComp comp)
if (rbBlack == TREE_PARENT(node)->color) { if (rbBlack == TREE_PARENT(node)->color) {
// case 3 // case 3
Tree parent = node->parent; Tree parent = node->parent;
delete(node);
node = parent; node = parent;
continue; continue;
} else { } else {
// case 4 // case 4
TREE_PARENT(node)->color = rbBlack; TREE_PARENT(node)->color = rbBlack;
delete(node);
break; break;
} }
} }
@ -240,6 +239,7 @@ treeDelete(Tree * this, const void * search, TreeComp comp)
break; break;
} }
delete(del_node);
/* /*
* not sure if deleting here is correct. * not sure if deleting here is correct.
*/ */

Loading…
Cancel
Save