Commit 4990e7d4d908bbfd5ab890720bc107f912c92afa

Authored by Georg Hopp
1 parent eacc711d

fix a small algorythmic bug introduced during optimization.

Showing 1 changed file with 9 additions and 4 deletions
@@ -123,11 +123,15 @@ TR_treeDelete(TR_Tree * this, const void * search, TR_TreeComp comp) @@ -123,11 +123,15 @@ TR_treeDelete(TR_Tree * this, const void * search, TR_TreeComp comp)
123 } else { 123 } else {
124 TR_TREE_ROTATE(right, this, node->parent); 124 TR_TREE_ROTATE(right, this, node->parent);
125 } 125 }
126 - } else {  
127 - // case 3/4  
128 - if (NULL != sibling 126 + sibling = TR_TREE_SIBLING(node);
  127 + }
  128 +
  129 + if (NULL == sibling
  130 + || (rbBlack == sibling->color
129 && TR_TREE_NODE_BLACK(sibling->left) 131 && TR_TREE_NODE_BLACK(sibling->left)
130 - && TR_TREE_NODE_BLACK(sibling->right)) { 132 + && TR_TREE_NODE_BLACK(sibling->right))) {
  133 + // case 3/4
  134 + if (NULL != sibling) {
131 sibling->color = rbRed; 135 sibling->color = rbRed;
132 } 136 }
133 137
@@ -163,6 +167,7 @@ TR_treeDelete(TR_Tree * this, const void * search, TR_TreeComp comp) @@ -163,6 +167,7 @@ TR_treeDelete(TR_Tree * this, const void * search, TR_TreeComp comp)
163 167
164 TR_TREE_ROTATE(left, this, sibling); 168 TR_TREE_ROTATE(left, this, sibling);
165 } 169 }
  170 + sibling = TR_TREE_SIBLING(node);
166 } 171 }
167 172
168 // case 6 173 // case 6
Please register or login to post a comment