From: a bellenir Date: Thu, 14 Aug 2014 07:51:27 +0000 (+0000) Subject: remove useless case in rbt_ins_recolor X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=5e34f23d95180ae5286dbc8f5ac21bfd1e28e2bd;p=projs%2Flibcds.git remove useless case in rbt_ins_recolor --- diff --git a/source/rbt/rbt.c b/source/rbt/rbt.c index 1e95e7a..56b3144 100644 --- a/source/rbt/rbt.c +++ b/source/rbt/rbt.c @@ -119,22 +119,21 @@ static void rbt_ins_recolor(rbt_t* tree, rbt_node_t* node){ rbt_node_t* uncle = (grandparent ? (parent == grandparent->left ? grandparent->right : grandparent->left) : NULL); if(NULL == parent){ node->color = BLACK; - }else if(BLACK == rbt_node_color(parent)){ - /* dont need to do anything */ - }else if(rbt_node_color(uncle) == RED){ - //parent and uncle are both red. both can be painted black - grandparent->color = RED; - parent->color = BLACK; - uncle->color = BLACK; - rbt_ins_recolor(tree, grandparent); - }else{ - direction_t node_side = (node == parent->left ? LEFT : RIGHT); - direction_t parent_side = (parent == grandparent->left ? LEFT : RIGHT); - if(node_side != parent_side){ // "inside" case - rbt_rotate(tree, parent, parent_side); //transform to "outside" case - node = parent; //parent now lowest node. + }else if(RED == rbt_node_color(parent)){ + if(rbt_node_color(uncle) == RED){ + grandparent->color = RED; + parent->color = BLACK; + uncle->color = BLACK; + rbt_ins_recolor(tree, grandparent); + }else{ + direction_t node_side = (node == parent->left ? LEFT : RIGHT); + direction_t parent_side = (parent == grandparent->left ? LEFT : RIGHT); + if(node_side != parent_side){ // "inside" case + rbt_rotate(tree, parent, parent_side); //transform to "outside" case + node = parent; //parent now lowest node. + } + rbt_ins_rebalance(tree, node, parent_side); } - rbt_ins_rebalance(tree, node, parent_side); } }