Commit 4990e7d4d908bbfd5ab890720bc107f912c92afa
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