Browse Source

fix a small algorythmic bug introduced during optimization.

1.0.0
Georg Hopp 12 years ago
parent
commit
4990e7d4d9
  1. 13
      src/tree/delete.c

13
src/tree/delete.c

@ -123,11 +123,15 @@ TR_treeDelete(TR_Tree * this, const void * search, TR_TreeComp comp)
} else { } else {
TR_TREE_ROTATE(right, this, node->parent); TR_TREE_ROTATE(right, this, node->parent);
} }
} else {
// case 3/4
if (NULL != sibling
sibling = TR_TREE_SIBLING(node);
}
if (NULL == sibling
|| (rbBlack == sibling->color
&& TR_TREE_NODE_BLACK(sibling->left) && TR_TREE_NODE_BLACK(sibling->left)
&& TR_TREE_NODE_BLACK(sibling->right)) {
&& TR_TREE_NODE_BLACK(sibling->right))) {
// case 3/4
if (NULL != sibling) {
sibling->color = rbRed; sibling->color = rbRed;
} }
@ -163,6 +167,7 @@ TR_treeDelete(TR_Tree * this, const void * search, TR_TreeComp comp)
TR_TREE_ROTATE(left, this, sibling); TR_TREE_ROTATE(left, this, sibling);
} }
sibling = TR_TREE_SIBLING(node);
} }
// case 6 // case 6

Loading…
Cancel
Save