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